sohutv / cachecloud

搜狐视频(sohu tv)Redis私有云平台 :支持Redis多种架构(Standalone、Sentinel、Cluster)高效管理、有效降低大规模redis运维成本,提升资源管控能力和利用率。平台提供快速搭建/迁移,运维管理,弹性伸缩,统计监控,客户端整合接入等功能。(CacheCloud is a Redis cloud management platform. It supports Standalone, Sentinel, and Cluster architectures for Redis, effectively reducing large-scale Redis operation and maintenance costs, and improving resource management and utilization. The platform provides rapid construction/migration, operation and maintenance management, elastic scaling, statistical monitoring, client integration and access and other functions)
http://cachecloud.github.io/
Apache License 2.0
8.89k stars 2.04k forks source link

Cachecloud 3.2 运行7天后开始报错app_client_value_minute_stats表不存在 #330

Closed zergduan closed 2 months ago

zergduan commented 5 months ago

Cachecloud 3.2 运行7天后开始报错app_client_value_minute_stats表不存在,但是源码中给出的初始化SQL中并没有这张表的创建语句,这是bug么?

2024-05-17 10:00:00.075 ERROR 5726 --- [zThreadPool-123] c.s.c.s.app.impl.AppDailyDataCenterImpl :

Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'cachecloud.app_client_value_minute_stats' doesn't exist

The error may exist in class path resource [mapper/AppClientValueStatDao.xml]

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: select distribute_type, sum(count) as count from app_client_value_minute_stats where app_id=? and collect_time between ? and ? group by distribute_type order by distribute_type

Cause: java.sql.SQLSyntaxErrorException: Table 'cachecloud.app_client_value_minute_stats' doesn't exist

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table 'cachecloud.app_client_value_minute_stats' doesn't exist

org.springframework.jdbc.BadSqlGrammarException:

Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'cachecloud.app_client_value_minute_stats' doesn't exist

The error may exist in class path resource [mapper/AppClientValueStatDao.xml]

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: select distribute_type, sum(count) as count from app_client_value_minute_stats where app_id=? and collect_time between ? and ? group by distribute_type order by distribute_type

Cause: java.sql.SQLSyntaxErrorException: Table 'cachecloud.app_client_value_minute_stats' doesn't exist

; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table 'cachecloud.app_client_value_minute_stats' doesn't exist at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:235) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) at com.sun.proxy.$Proxy82.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230) at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) at com.sun.proxy.$Proxy139.getAppValueDistriList(Unknown Source) at com.sohu.cache.stats.app.impl.AppDailyDataCenterImpl.getAppClientValueSizeDistributeCountMap(AppDailyDataCenterImpl.java:209) at com.sohu.cache.stats.app.impl.AppDailyDataCenterImpl.generateAppDaily(AppDailyDataCenterImpl.java:165) at com.sohu.cache.stats.app.impl.AppDailyDataCenterImpl.sendAppDailyEmail(AppDailyDataCenterImpl.java:88) at com.sohu.cache.stats.app.impl.AppDailyDataCenterImpl.sendAppDailyEmail(AppDailyDataCenterImpl.java:74) at com.sohu.cache.schedule.jobs.AppDailyJob.action(AppDailyJob.java:35) at com.sohu.cache.schedule.jobs.CacheBaseJob.execute(CacheBaseJob.java:33) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750) Caused by: java.sql.SQLSyntaxErrorException: Table 'cachecloud.app_client_value_minute_stats' doesn't exist at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) at sun.reflect.GeneratedMethodAccessor243.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ... 16 common frames omitted

githubname1024 commented 5 months ago

@zergduan 非常感谢。 这个确实是个bug,app_client_value_minute_stats 是一张废弃的表,但代码中某些地方(如发送应用日报)仍会访问该表,不会获取到数据。缺失这个表,不会对其他业务逻辑产生影响。

cachecloud 2.0版本之后应该都会有这个问题,将在下一版本进行修复。

目前建议在数据库中,增加该表,建表语句如下:

DROP TABLE IF EXISTS app_client_value_minute_stats; CREATE TABLE app_client_value_minute_stats ( app_id bigint(20) NOT NULL COMMENT '应用id', collect_time bigint(20) NOT NULL COMMENT '统计时间:格式yyyyMMddHHmm00', update_time datetime NOT NULL COMMENT '创建时间', command varchar(20) NOT NULL COMMENT '命令', distribute_type tinyint(4) NOT NULL COMMENT '值分布类型', count int(11) NOT NULL COMMENT '调用次数', PRIMARY KEY (app_id,collect_time,command,distribute_type), KEY idx_collect_time (collect_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户端每分钟值分布上报数据统计';

zergduan commented 5 months ago

多谢您的解答