guild cache update

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@500 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
amber 2004-12-08 00:59:42 +00:00
parent 52f618950a
commit 1bd978e10b
2 changed files with 150 additions and 3 deletions

View File

@ -1,5 +1,7 @@
Date Added Date Added
12/7 12/7
* Added GUILDCACHE #define to int_guild.c for testing performance
effects [MouseJstr]
* Skill Updates [celest] * Skill Updates [celest]
- Arrow Shower, Double Strafing, Charge Arrow, Throw Arrow, Sharp Shooting, - Arrow Shower, Double Strafing, Charge Arrow, Throw Arrow, Sharp Shooting,
Arrow Vulcan, and Musical Strike now take arrows when used Arrow Vulcan, and Musical Strike now take arrows when used

View File

@ -11,11 +11,22 @@
#include "int_storage.h" #include "int_storage.h"
#include "mmo.h" #include "mmo.h"
#include "socket.h" #include "socket.h"
#ifdef GUILDCACHE
#include "db.h"
#endif /* GUILDCACHE */
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#ifdef GUILDCACHE
static struct dbt *guild_db_;
static struct dbt *castle_db_;
static struct dbt *guild_expcache_db_;
static struct dbt *guild_infoevent_db_;
static struct dbt *guild_castleinfoevent_db_;
#endif /* GUILDCACHE */
static struct guild *guild_pt; static struct guild *guild_pt;
static struct guild *guild_pt2; static struct guild *guild_pt2;
static struct guild_castle * guildcastle_pt; static struct guild_castle * guildcastle_pt;
@ -285,16 +296,35 @@ int inter_guild_tosql(struct guild *g,int flag)
} }
// Read guild from sql // Read guild from sql
#ifndef GUILDCACHE
int inter_guild_fromsql(int guild_id,struct guild *g) int inter_guild_fromsql(int guild_id,struct guild *g)
#else /* GUILDCACHE */
struct guild * inter_guild_fromsql(int guild_id)
#endif /* GUILDCACHE */
{ {
int i; int i;
char emblem_data[4096]; char emblem_data[4096];
char *pstr; char *pstr;
#ifdef GUILDCACHE
struct guild *g;
if (g==NULL) return 0;
memset(g,0,sizeof(struct guild));
if (guild_id==0) return 0; if (guild_id==0) return 0;
g = numdb_search(guild_db_,guild_id);
if (g != NULL)
return g;
#endif /* GUILDCACHE */
#ifndef GUILDCACHE
if (g==NULL) return 0;
#else /* GUILDCACHE */
g = (struct guild *) malloc(sizeof(struct guild));
#endif /* GUILDCACHE */
memset(g,0,sizeof(struct guild));
#ifndef GUILDCACHE
if (guild_id==0) return 0;
#endif /* not GUILDCACHE */
// printf("Retrieve guild information from sql ......\n"); // printf("Retrieve guild information from sql ......\n");
// printf("- Read guild %d from sql \n",guild_id); // printf("- Read guild %d from sql \n",guild_id);
@ -303,6 +333,9 @@ int inter_guild_fromsql(int guild_id,struct guild *g)
//printf(" %s\n",tmp_sql); //printf(" %s\n",tmp_sql);
if(mysql_query(&mysql_handle, tmp_sql) ) { if(mysql_query(&mysql_handle, tmp_sql) ) {
printf("DB server Error (select `guild`)- %s\n", mysql_error(&mysql_handle) ); printf("DB server Error (select `guild`)- %s\n", mysql_error(&mysql_handle) );
#ifdef GUILDCACHE
free(g);
#endif /* GUILDCACHE */
return 0; return 0;
} }
@ -311,6 +344,9 @@ int inter_guild_fromsql(int guild_id,struct guild *g)
sql_row = mysql_fetch_row(sql_res); sql_row = mysql_fetch_row(sql_res);
if (sql_row==NULL) { if (sql_row==NULL) {
mysql_free_result(sql_res); mysql_free_result(sql_res);
#ifdef GUILDCACHE
free(g);
#endif /* GUILDCACHE */
return 0; return 0;
} }
@ -349,6 +385,9 @@ int inter_guild_fromsql(int guild_id,struct guild *g)
//printf(" %s\n",tmp_sql); //printf(" %s\n",tmp_sql);
if(mysql_query(&mysql_handle, tmp_sql) ) { if(mysql_query(&mysql_handle, tmp_sql) ) {
printf("DB server Error (select `guild_member`)- %s\n", mysql_error(&mysql_handle) ); printf("DB server Error (select `guild_member`)- %s\n", mysql_error(&mysql_handle) );
#ifdef GUILDCACHE
free(g);
#endif /* GUILDCACHE */
return 0; return 0;
} }
sql_res = mysql_store_result(&mysql_handle) ; sql_res = mysql_store_result(&mysql_handle) ;
@ -377,6 +416,9 @@ int inter_guild_fromsql(int guild_id,struct guild *g)
//printf(" %s\n",tmp_sql); //printf(" %s\n",tmp_sql);
if(mysql_query(&mysql_handle, tmp_sql) ) { if(mysql_query(&mysql_handle, tmp_sql) ) {
printf("DB server Error (select `guild_position`)- %s\n", mysql_error(&mysql_handle) ); printf("DB server Error (select `guild_position`)- %s\n", mysql_error(&mysql_handle) );
#ifdef GUILDCACHE
free(g);
#endif /* GUILDCACHE */
return 0; return 0;
} }
sql_res = mysql_store_result(&mysql_handle) ; sql_res = mysql_store_result(&mysql_handle) ;
@ -396,6 +438,9 @@ int inter_guild_fromsql(int guild_id,struct guild *g)
sprintf(tmp_sql,"SELECT `guild_id`,`opposition`,`alliance_id`,`name` FROM `%s` WHERE `guild_id`='%d'",guild_alliance_db, guild_id); sprintf(tmp_sql,"SELECT `guild_id`,`opposition`,`alliance_id`,`name` FROM `%s` WHERE `guild_id`='%d'",guild_alliance_db, guild_id);
if(mysql_query(&mysql_handle, tmp_sql) ) { if(mysql_query(&mysql_handle, tmp_sql) ) {
printf("DB server Error (select `guild_alliance`)- %s\n", mysql_error(&mysql_handle) ); printf("DB server Error (select `guild_alliance`)- %s\n", mysql_error(&mysql_handle) );
#ifdef GUILDCACHE
free(g);
#endif /* GUILDCACHE */
return 0; return 0;
} }
sql_res = mysql_store_result(&mysql_handle) ; sql_res = mysql_store_result(&mysql_handle) ;
@ -414,6 +459,9 @@ int inter_guild_fromsql(int guild_id,struct guild *g)
sprintf(tmp_sql,"SELECT `guild_id`,`name`,`mes`,`acc`,`account_id`,`rsv1`,`rsv2`,`rsv3` FROM `%s` WHERE `guild_id`='%d'",guild_expulsion_db, guild_id); sprintf(tmp_sql,"SELECT `guild_id`,`name`,`mes`,`acc`,`account_id`,`rsv1`,`rsv2`,`rsv3` FROM `%s` WHERE `guild_id`='%d'",guild_expulsion_db, guild_id);
if(mysql_query(&mysql_handle, tmp_sql) ) { if(mysql_query(&mysql_handle, tmp_sql) ) {
printf("DB server Error (select `guild_expulsion`)- %s\n", mysql_error(&mysql_handle) ); printf("DB server Error (select `guild_expulsion`)- %s\n", mysql_error(&mysql_handle) );
#ifdef GUILDCACHE
free(g);
#endif /* GUILDCACHE */
return 0; return 0;
} }
sql_res = mysql_store_result(&mysql_handle) ; sql_res = mysql_store_result(&mysql_handle) ;
@ -438,6 +486,9 @@ int inter_guild_fromsql(int guild_id,struct guild *g)
sprintf(tmp_sql,"SELECT `guild_id`,`id`,`lv` FROM `%s` WHERE `guild_id`='%d' ORDER BY `id`",guild_skill_db, guild_id); sprintf(tmp_sql,"SELECT `guild_id`,`id`,`lv` FROM `%s` WHERE `guild_id`='%d' ORDER BY `id`",guild_skill_db, guild_id);
if(mysql_query(&mysql_handle, tmp_sql) ) { if(mysql_query(&mysql_handle, tmp_sql) ) {
printf("DB server Error (select `guild_skill`)- %s\n", mysql_error(&mysql_handle) ); printf("DB server Error (select `guild_skill`)- %s\n", mysql_error(&mysql_handle) );
#ifdef GUILDCACHE
free(g);
#endif /* GUILDCACHE */
return 0; return 0;
} }
sql_res = mysql_store_result(&mysql_handle) ; sql_res = mysql_store_result(&mysql_handle) ;
@ -452,8 +503,14 @@ int inter_guild_fromsql(int guild_id,struct guild *g)
// printf("Successfully retrieve guild information from sql!\n"); // printf("Successfully retrieve guild information from sql!\n");
#ifndef GUILDCACHE
return 0; return 0;
#else /* GUILDCACHE */
numdb_insert(guild_db_, guild_id,g);
return g;
#endif /* GUILDCACHE */
} }
// Save guild_castle to sql // Save guild_castle to sql
@ -589,6 +646,14 @@ int inter_guild_sql_init()
{ {
int i; int i;
#ifdef GUILDCACHE
guild_db_=numdb_init();
castle_db_=numdb_init();
guild_expcache_db_=numdb_init();
guild_infoevent_db_=numdb_init();
guild_castleinfoevent_db_=numdb_init();
#endif /* GUILDCACHE */
printf("interserver guild memory initialize.... (%d byte)\n",sizeof(struct guild)); printf("interserver guild memory initialize.... (%d byte)\n",sizeof(struct guild));
guild_pt = calloc(sizeof(struct guild), 1); guild_pt = calloc(sizeof(struct guild), 1);
guild_pt2= calloc(sizeof(struct guild), 1); guild_pt2= calloc(sizeof(struct guild), 1);
@ -630,7 +695,9 @@ int inter_guild_sql_init()
// Get guild by its name // Get guild by its name
struct guild* search_guildname(char *str) struct guild* search_guildname(char *str)
{ {
#ifndef GUILDCACHE
struct guild *g=guild_pt; struct guild *g=guild_pt;
#endif /* not GUILDCACHE */
char t_name[24]; char t_name[24];
int guild_id=0; int guild_id=0;
printf("search_guildname\n"); printf("search_guildname\n");
@ -644,8 +711,12 @@ struct guild* search_guildname(char *str)
guild_id = atoi (sql_row[0]); guild_id = atoi (sql_row[0]);
} }
mysql_free_result(sql_res); mysql_free_result(sql_res);
#ifndef GUILDCACHE
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
return g; return g;
#else /* GUILDCACHE */
return inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
} }
// Check if guild is empty // Check if guild is empty
@ -1077,9 +1148,13 @@ int mapif_parse_CreateGuild(int fd,int account_id,char *name,struct guild_member
// Return guild info to client // Return guild info to client
int mapif_parse_GuildInfo(int fd,int guild_id) int mapif_parse_GuildInfo(int fd,int guild_id)
{ {
#ifndef GUILDCACHE
struct guild *g; struct guild *g;
g=guild_pt; g=guild_pt;
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#else /* GUILDCACHE */
struct guild * g = inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
if(g!=NULL&&g->guild_id>0){ if(g!=NULL&&g->guild_id>0){
guild_calcinfo(g); guild_calcinfo(g);
mapif_guild_info(fd,g); mapif_guild_info(fd,g);
@ -1091,10 +1166,16 @@ int mapif_parse_GuildInfo(int fd,int guild_id)
// Add member to guild // Add member to guild
int mapif_parse_GuildAddMember(int fd,int guild_id,struct guild_member *m) int mapif_parse_GuildAddMember(int fd,int guild_id,struct guild_member *m)
{ {
#ifndef GUILDCACHE
struct guild *g=guild_pt; struct guild *g=guild_pt;
#else /* GUILDCACHE */
struct guild *g = inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
int i; int i;
#ifndef GUILDCACHE
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#endif /* not GUILDCACHE */
if(g==NULL||g->guild_id<=0){ if(g==NULL||g->guild_id<=0){
mapif_guild_memberadded(fd,guild_id,m->account_id,m->char_id,1); mapif_guild_memberadded(fd,guild_id,m->account_id,m->char_id,1);
@ -1119,9 +1200,13 @@ int mapif_parse_GuildAddMember(int fd,int guild_id,struct guild_member *m)
// Delete member from guild // Delete member from guild
int mapif_parse_GuildLeave(int fd,int guild_id,int account_id,int char_id,int flag,const char *mes) int mapif_parse_GuildLeave(int fd,int guild_id,int account_id,int char_id,int flag,const char *mes)
{ {
#ifndef GUILDCACHE
struct guild *g=guild_pt; struct guild *g=guild_pt;
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#else /* GUILDCACHE */
struct guild *g= inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
if(g!=NULL&&g->guild_id>0){ if(g!=NULL&&g->guild_id>0){
int i; int i;
@ -1171,25 +1256,38 @@ int mapif_parse_GuildLeave(int fd,int guild_id,int account_id,int char_id,int fl
/* mapif_guild_leaved(guild_id,account_id,char_id,flag,g->member[i].name,mes); */ /* mapif_guild_leaved(guild_id,account_id,char_id,flag,g->member[i].name,mes); */
} }
#ifndef GUILDCACHE
#endif /* not GUILDCACHE */
return 0; return 0;
} }
#ifdef GUILDCACHE
#endif /* GUILDCACHE */
// Change member info // Change member info
int mapif_parse_GuildChangeMemberInfoShort(int fd,int guild_id, int mapif_parse_GuildChangeMemberInfoShort(int fd,int guild_id,
int account_id,int char_id,int online,int lv,int class) int account_id,int char_id,int online,int lv,int class)
{ {
// Could speed up by manipulating only guild_member // Could speed up by manipulating only guild_member
#ifndef GUILDCACHE
struct guild * g=guild_pt; struct guild * g=guild_pt;
#else /* GUILDCACHE */
struct guild * g= inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
int i,alv,c; int i,alv,c;
#ifndef GUILDCACHE
#endif /* not GUILDCACHE */
if(g==NULL||g->guild_id<=0) if(g==NULL||g->guild_id<=0)
return 0; return 0;
#ifndef GUILDCACHE
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#endif /* not GUILDCACHE */
g->connect_member=0; g->connect_member=0;
@ -1220,13 +1318,19 @@ int mapif_parse_GuildChangeMemberInfoShort(int fd,int guild_id,
// BreakGuild // BreakGuild
int mapif_parse_BreakGuild(int fd,int guild_id) int mapif_parse_BreakGuild(int fd,int guild_id)
{ {
#ifndef GUILDCACHE
struct guild *g=guild_pt; struct guild *g=guild_pt;
#else /* GUILDCACHE */
struct guild *g= inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
if(g==NULL) if(g==NULL)
return 0; return 0;
#ifndef GUILDCACHE
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#endif /* not GUILDCACHE */
// Delete guild from sql // Delete guild from sql
//printf("- Delete guild %d from guild\n",guild_id); //printf("- Delete guild %d from guild\n",guild_id);
@ -1290,17 +1394,25 @@ int mapif_parse_GuildMessage(int fd,int guild_id,int account_id,char *mes,int le
int mapif_parse_GuildBasicInfoChange(int fd,int guild_id, int mapif_parse_GuildBasicInfoChange(int fd,int guild_id,
int type,const char *data,int len) int type,const char *data,int len)
{ {
#ifndef GUILDCACHE
struct guild * g=guild_pt; struct guild * g=guild_pt;
#else /* GUILDCACHE */
struct guild * g = inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
// int dd=*((int *)data); // int dd=*((int *)data);
short dw=*((short *)data); short dw=*((short *)data);
#ifndef GUILDCACHE
#endif /* not GUILDCACHE */
if(g==NULL||g->guild_id<=0) if(g==NULL||g->guild_id<=0)
return 0; return 0;
#ifndef GUILDCACHE
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#endif /* not GUILDCACHE */
switch(type){ switch(type){
case GBI_GUILDLV: { case GBI_GUILDLV: {
printf("GBI_GUILDLV\n"); printf("GBI_GUILDLV\n");
@ -1327,9 +1439,15 @@ int mapif_parse_GuildMemberInfoChange(int fd,int guild_id,int account_id,int cha
{ {
// Could make some improvement in speed, because only change guild_member // Could make some improvement in speed, because only change guild_member
int i; int i;
#ifndef GUILDCACHE
struct guild * g=guild_pt; struct guild * g=guild_pt;
#else /* GUILDCACHE */
struct guild * g = inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
#ifndef GUILDCACHE
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#endif /* not GUILDCACHE */
//printf("GuildMemberInfoChange %s \n",(type==GMI_EXP)?"GMI_EXP":"OTHER"); //printf("GuildMemberInfoChange %s \n",(type==GMI_EXP)?"GMI_EXP":"OTHER");
if(g==NULL){ if(g==NULL){
@ -1368,9 +1486,13 @@ int mapif_parse_GuildMemberInfoChange(int fd,int guild_id,int account_id,int cha
int mapif_parse_GuildPosition(int fd,int guild_id,int idx,struct guild_position *p) int mapif_parse_GuildPosition(int fd,int guild_id,int idx,struct guild_position *p)
{ {
// Could make some improvement in speed, because only change guild_position // Could make some improvement in speed, because only change guild_position
#ifndef GUILDCACHE
struct guild * g=guild_pt; struct guild * g=guild_pt;
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#else /* GUILDCACHE */
struct guild * g = inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
if(g==NULL || idx<0 || idx>=MAX_GUILDPOSITION){ if(g==NULL || idx<0 || idx>=MAX_GUILDPOSITION){
return 0; return 0;
@ -1385,10 +1507,16 @@ int mapif_parse_GuildPosition(int fd,int guild_id,int idx,struct guild_position
int mapif_parse_GuildSkillUp(int fd,int guild_id,int skill_num,int account_id) int mapif_parse_GuildSkillUp(int fd,int guild_id,int skill_num,int account_id)
{ {
// Could make some improvement in speed, because only change guild_position // Could make some improvement in speed, because only change guild_position
#ifndef GUILDCACHE
struct guild *g=guild_pt; struct guild *g=guild_pt;
#else /* GUILDCACHE */
struct guild *g = inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
int idx = skill_num - GD_SKILLBASE; int idx = skill_num - GD_SKILLBASE;
#ifndef GUILDCACHE
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#endif /* not GUILDCACHE */
if(g == NULL || idx < 0 || idx >= MAX_GUILDSKILL) if(g == NULL || idx < 0 || idx >= MAX_GUILDSKILL)
return 0; return 0;
@ -1414,10 +1542,15 @@ int mapif_parse_GuildAlliance(int fd,int guild_id1,int guild_id2,
// Could speed up // Could speed up
struct guild *g[2]; struct guild *g[2];
int j,i; int j,i;
#ifndef GUILDCACHE
g[0]=guild_pt; g[0]=guild_pt;
g[1]=guild_pt2; g[1]=guild_pt2;
inter_guild_fromsql(guild_id1,g[0]); inter_guild_fromsql(guild_id1,g[0]);
inter_guild_fromsql(guild_id2,g[1]); inter_guild_fromsql(guild_id2,g[1]);
#else /* GUILDCACHE */
g[0]= inter_guild_fromsql(guild_id1);
g[1]= inter_guild_fromsql(guild_id2);
#endif /* GUILDCACHE */
if(g[0]==NULL || g[1]==NULL || g[0]->guild_id ==0 || g[1]->guild_id==0) if(g[0]==NULL || g[1]==NULL || g[0]->guild_id ==0 || g[1]->guild_id==0)
return 0; return 0;
@ -1451,9 +1584,13 @@ int mapif_parse_GuildAlliance(int fd,int guild_id1,int guild_id2,
// ギルド告知変更要求 // ギルド告知変更要求
int mapif_parse_GuildNotice(int fd,int guild_id,const char *mes1,const char *mes2) int mapif_parse_GuildNotice(int fd,int guild_id,const char *mes1,const char *mes2)
{ {
#ifndef GUILDCACHE
struct guild *g=guild_pt; struct guild *g=guild_pt;
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#else /* GUILDCACHE */
struct guild *g= inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
if(g==NULL||g->guild_id<=0) if(g==NULL||g->guild_id<=0)
return 0; return 0;
@ -1465,9 +1602,13 @@ int mapif_parse_GuildNotice(int fd,int guild_id,const char *mes1,const char *mes
// ギルドエンブレム変更要求 // ギルドエンブレム変更要求
int mapif_parse_GuildEmblem(int fd,int len,int guild_id,int dummy,const char *data) int mapif_parse_GuildEmblem(int fd,int len,int guild_id,int dummy,const char *data)
{ {
#ifndef GUILDCACHE
struct guild * g=guild_pt; struct guild * g=guild_pt;
inter_guild_fromsql(guild_id,g); inter_guild_fromsql(guild_id,g);
#else /* GUILDCACHE */
struct guild * g= inter_guild_fromsql(guild_id);
#endif /* GUILDCACHE */
if(g==NULL||g->guild_id<=0) if(g==NULL||g->guild_id<=0)
return 0; return 0;
@ -1528,8 +1669,12 @@ int mapif_parse_GuildCastleDataSave(int fd,int castle_id,int index,int value)
case 1: case 1:
if( gc->guild_id!=value ){ if( gc->guild_id!=value ){
int gid=(value)?value:gc->guild_id; int gid=(value)?value:gc->guild_id;
#ifndef GUILDCACHE
struct guild *g=guild_pt; struct guild *g=guild_pt;
inter_guild_fromsql(gid, g); inter_guild_fromsql(gid, g);
#else /* GUILDCACHE */
struct guild *g=inter_guild_fromsql(gid);
#endif /* GUILDCACHE */
if(log_inter) if(log_inter)
inter_log("guild %s (id=%d) %s castle id=%d" RETCODE, inter_log("guild %s (id=%d) %s castle id=%d" RETCODE,
(g)?g->name:"??" ,gid, (value)?"occupy":"abandon", index); (g)?g->name:"??" ,gid, (value)?"occupy":"abandon", index);