Exemple #1
0
FILE* Appender::OpenAppendFile( char* mod )
{
	char tmpfile[MAX_FILENAME_LEN];
	FILE* fp = NULL;
	JK_SPRITF_S(tmpfile, MAX_FILENAME_LEN, "molydb_af_%d.dmf", ServerConfigData::IsMaster() );
	JK_OPENFILE_S( fp,tmpfile, mod);
	return fp;
}
Exemple #2
0
void DataSpace::Replication( int cmd, void* key, void* val )
{
	if ( m_bSlave )
	{
		return;
	}
	MSG_M2S_APPENDCOMMAND_CMD cmdMsg;
	cmdMsg.m_byLen = JK_SPRITF_S( cmdMsg.m_strCmd, MAX_CMD_LEN, "%d %s %s \n", cmd, (char*)key, (char*)val );
	SlaveMgr::GetInstance().BroadAllSlave( (BYTE*)&cmdMsg, cmdMsg.GetMsgSize() );
}
Exemple #3
0
void DataSpace::Operation( int cmd, void* key, void* val )
{
	char* strTemp = (char*)JK_MALLOC(MAX_CMD_LEN);		// char[128]; 
	JK_SPRITF_S( strTemp, MAX_CMD_LEN, "%d %s %s \n", cmd, (char*)key, (char*)val );
	AppendCmdQueue::Enqueue( strTemp );
}
Exemple #4
0
void ClientAgent::OnRecv(BYTE *pMsg, WORD wSize)
{
	MSG_BASE* pMsgBase = (MSG_BASE*)pMsg;
	switch (pMsgBase->m_byCategory)
	{
	case emc_CS_CATEGORY:
		{
			switch (pMsgBase->m_byProtocol)
			{
			case C2S_CLTREGISTER_SYN:
				{
					DISPMSG_SUCCESS( "Accept client[%s] success!\n", GetIP() );
					m_iAgentType = 1;
				}
				break;

			case C2S_INSERT_ITEM_SYN:
				{
					MSG_C2S_INSERT_ITEM_SYN* pInsertMsg = (MSG_C2S_INSERT_ITEM_SYN*)pMsg;
					if ( !CheckSvrReady() )
					{
						return;
					}
					if (DataSpace::GetInstance().InsertKV(pInsertMsg->strKey, pInsertMsg->m_usKeyLen, pInsertMsg->strVal, pInsertMsg->m_usValLen))
					{
						ReplyResult( egr_INSERTSUCCESS );
					}
					else
					{
						ReplyResult( egr_INSERTFAILD );
					}
				}
				break;

			case C2S_SELECT_ITEM_SYN:
				{
					MSG_C2S_SELECT_ITEM_SYN* pInsertMsg = (MSG_C2S_SELECT_ITEM_SYN*)pMsg;
					char* strVal = (char*)DataSpace::GetInstance().GetValue(pInsertMsg->strKey);
					if (NULL == strVal)
					{
						ReplyResult( egr_CANTFINDVAL );
					}
					else
					{
						MSG_S2C_SELECT_ITEM_ACK ackmsg;
						strcpy_s(ackmsg.strKey, MAX_KEY_LEN, pInsertMsg->strKey);
						strcpy_s(ackmsg.strVal, 1024, strVal);
						Send((BYTE*)&ackmsg, sizeof(MSG_S2C_SELECT_ITEM_ACK));
					}
				}
				break;

			case C2S_REMOVE_ITEM_SYN:
				{
					MSG_C2S_REMOVE_ITEM_SYN* pInsertMsg = (MSG_C2S_REMOVE_ITEM_SYN*)pMsg;

					if ( !CheckSvrReady() )
					{
						return;
					}
					if ( !DataSpace::GetInstance().RemoveKV(pInsertMsg->strKey) )
					{
						ReplyResult( egr_CANTFINDVAL );
					}
					else
					{
						ReplyResult( egr_REMOVESUCCESS );
					}
				}
				break;

			case C2S_SELECT_KEYS_SYN:
				{
					MSG_C2S_SELECT_KEYS_SYN* pKeysMsg = (MSG_C2S_SELECT_KEYS_SYN*)pMsg;

					if ( !CheckSvrReady() )
					{
						return;
					}

					MSG_S2C_SELECT_KEYS_ACK ackmsg;
					DataSpace::GetInstance().FetchKeys(pKeysMsg->m_szPattern, 0, 100, ackmsg.m_szKeys, ackmsg.m_iKeysCnt );
					if ( 0 == ackmsg.m_iKeysCnt )
					{
						ReplyResult( egr_NOSUCHKEYS );
					}
					Send((BYTE*)&ackmsg, ackmsg.GetMsgSize() );

				}
				break;

			case C2S_EXISTS_KEY_SYN:
				{
					MSG_C2S_EXISTS_KEY_SYN* pKeysMsg = (MSG_C2S_EXISTS_KEY_SYN*)pMsg;

					if ( !CheckSvrReady() )
					{
						return;
					}
					if( DataSpace::GetInstance().IsExists(pKeysMsg->strKey ) )
					{
						ReplyResult( egr_KEYEXISTS );
					}
					else
					{
						ReplyResult( egr_NOSUCHKEYS );
					}
				}
				break;

			case C2S_LPUSH_ITEM_SYN:
				{
					MSG_C2S_LPUSH_ITEM_SYN* pInsertMsg = (MSG_C2S_LPUSH_ITEM_SYN*)pMsg;

					if ( !CheckSvrReady() )
					{
						return;
					}
					if (DataSpace::GetInstance().ListPushLeft(pInsertMsg->strKey, pInsertMsg->m_usKeyLen, pInsertMsg->strVal, pInsertMsg->m_usValLen))
					{
						ReplyResult( egr_INSERTSUCCESS );
					}
					else
					{
						ReplyResult( egr_INSERTFAILD );
					}
				}
				break;


			case C2S_RPUSH_ITEM_SYN:
				{
					MSG_C2S_RPUSH_ITEM_SYN* pInsertMsg = (MSG_C2S_RPUSH_ITEM_SYN*)pMsg;
					if ( !CheckSvrReady() )
					{
						return;
					}
					if (DataSpace::GetInstance().ListPushRight(pInsertMsg->strKey, pInsertMsg->m_usKeyLen, pInsertMsg->strVal, pInsertMsg->m_usValLen))
					{
						ReplyResult( egr_INSERTSUCCESS );
					}
					else
					{
						ReplyResult( egr_INSERTFAILD );
					}
				}
				break;

			case C2S_LPOP_ITEM_SYN:
				{
					MSG_C2S_LPOP_ITEM_SYN* pInsertMsg = (MSG_C2S_LPOP_ITEM_SYN*)pMsg;
					if ( !CheckSvrReady() )
					{
						return;
					}

					char* strVal = (char*)( DataSpace::GetInstance().ListPopLeft(pInsertMsg->strKey) );
					if (NULL == strVal)
					{
						ReplyResult( egr_CANTFINDVAL );
					}
					else
					{
						MSG_S2C_SELECT_ITEM_ACK ackmsg;
						strcpy_s(ackmsg.strKey, MAX_KEY_LEN, pInsertMsg->strKey);
						strcpy_s(ackmsg.strVal, 1024, strVal);
						Send((BYTE*)&ackmsg, sizeof(MSG_S2C_SELECT_ITEM_ACK));
					}
				}
				break;

			case C2S_RPOP_ITEM_SYN:
				{
					if ( !CheckSvrReady() )
					{
						return;
					}
					MSG_C2S_RPOP_ITEM_SYN* pInsertMsg = (MSG_C2S_RPOP_ITEM_SYN*)pMsg;
					char* strVal = (char*)( DataSpace::GetInstance().ListPopRight(pInsertMsg->strKey) );
					if (NULL == strVal)
					{
						ReplyResult( egr_CANTFINDVAL );
					}
					else
					{
						MSG_S2C_SELECT_ITEM_ACK ackmsg;
						strcpy_s(ackmsg.strKey, MAX_KEY_LEN, pInsertMsg->strKey);
						strcpy_s(ackmsg.strVal, 1024, strVal);
						Send((BYTE*)&ackmsg, sizeof(MSG_S2C_SELECT_ITEM_ACK));
					}
				}
				break;

			case C2S_LLEN_ITEM_SYN:
				{
					if ( !CheckSvrReady() )
					{
						return;
					}
					MSG_C2S_LLEN_ITEM_SYN* pllMsg = (MSG_C2S_LLEN_ITEM_SYN*)pMsg;
					int iLength = DataSpace::GetInstance().GetListLength(pllMsg->strKey);
					MSG_S2C_SELECT_ITEM_ACK ackmsg;
					strcpy_s(ackmsg.strKey, MAX_KEY_LEN, pllMsg->strKey);
					JK_SPRITF_S( ackmsg.strVal, 1024, "%d", iLength );
					Send((BYTE*)&ackmsg, sizeof(MSG_S2C_SELECT_ITEM_ACK));

				}
				break;

			default:
				{
					DISPMSG_ERROR("Error protocol type, cat[%d], pro[%d]", pMsgBase->m_byCategory, pMsgBase->m_byProtocol );
				}
				break;
			}
		}
		break;


	case emc_MS_CATEGORY:
		{
			switch (pMsgBase->m_byProtocol)
			{
			case S2M_SLVREGISTER_SYN:
				{
					DISPMSG_SUCCESS( "Accept slave[%s] success!\n", GetIP() );
					m_iAgentType = 2;
					Appender::ReplicateAppendFile( this );
					SlaveMgr::GetInstance().InsertSlave( this );
				}
				break;

			case S2M_APPENDFILE_SYN:
				{
					// sync replication

				}
				break;
			}
		}
		break;

	default:
		{
			DISPMSG_ERROR("Error protocol type, cat[%d], pro[%d]", pMsgBase->m_byCategory, pMsgBase->m_byProtocol );
		}
		break;
	}
}