聊聊tempo的ExclusiveQueues

2021-01-30
阅读 2 分钟
1.9k
序本文主要研究一下tempo的ExclusiveQueuesExclusiveQueuestempo/pkg/flushqueues/exclusivequeues.go {代码...} ExclusiveQueues定义了queues、index、activeKeys属性Newtempo/pkg/flushqueues/exclusivequeues.go {代码...} New方法先创建ExclusiveQueues,然后根据指定的queue个数通过util.NewPriorityQueue(metric)...

聊聊tempodb的Pool

2021-01-29
阅读 5 分钟
1.9k
序本文主要研究一下tempodb的PoolPooltempo/tempodb/pool/pool.go {代码...} Pool定义了cfg、size、workQueue、shutdownCh属性jobtempo/tempodb/pool/pool.go {代码...} job定义了ctx、cancel、payload、JobFunc、wg、resultsCh、stop、err属性;JobFunc接收payload,返回[]byte类型的结果Configtempo/tempodb/pool/pool...

聊聊loki的Query

2021-01-28
阅读 4 分钟
2.7k
序本文主要研究一下loki的QueryQueryloki/pkg/logql/engine.go {代码...} Query接口定义了Exec方法,返回Result;Result定义了Data、Statistics属性Execloki/pkg/logql/engine.go {代码...} Exec方法执行q.Eval(ctx)及stats.SnapshotEvalloki/pkg/logql/engine.go {代码...} Eval方法执行q.parse解析为Expr,之后根据Exp...

聊聊cortex的kv.Client

2021-01-27
阅读 9 分钟
2.2k
github.com/cortexproject/cortex/pkg/ring/kv/memberlist/memberlist_client.go

聊聊cortex的ReadRing

2021-01-26
阅读 9 分钟
1.7k
ReadRing内嵌了prometheus.Collector,定义了Get、GetAllHealthy、GetReplicationSetForOperation、ReplicationFactor、IngesterCount、ShuffleShard、ShuffleShardWithLookback、HasInstance方法

聊聊cortex的Distributor

2021-01-25
阅读 12 分钟
2.1k
序本文主要研究一下cortex的DistributorDistributorcortex/pkg/distributor/distributor.go {代码...} Distributor用于转发、追加、查询ingestersPushcortex/pkg/distributor/distributor.go {代码...} Push方法在d.cfg.ShardingStrategy为util.ShardingStrategyShuffle时,会通过d.ingestersRing.ShuffleShard确定subRi...

聊聊cortex的Ingester

2021-01-24
阅读 8 分钟
2.2k
Ingester接口内嵌了client.IngesterServer,定义了FlushHandler、ShutdownHandler、Push方法

聊聊cortex的tenant

2021-01-23
阅读 5 分钟
1.8k
tenant提供了NormalizeTenantIDs、ValidTenantID、JoinTenantIDs方法;NormalizeTenantIDs用于去重和排序tenantIDs;ValidTenantID会通过isSupported进行校验,并校验长度;JoinTenantIDs使用|来连接TenantID

聊聊cortex的Backoff

2021-01-22
阅读 4 分钟
2.3k
Backoff定义了cfg、ctx、numRetries、nextDelayMin、nextDelayMax属性;NewBackoff提供了基于BackoffConfig的工厂方法,默认的nextDelayMin为cfg.MinBackoff

聊聊promtail的positions

2021-01-21
阅读 6 分钟
2.6k
序本文主要研究一下promtail的positionsPositionsloki/pkg/promtail/positions/positions.go {代码...} Positions接口定义了GetString、Get、PutString、Put、Remove、SyncPeriod、Stop方法positionsloki/pkg/promtail/positions/positions.go {代码...} positions定义了logger、cfg、mtx、positions、quit、done属性;...

聊聊promtail的Client

2021-01-20
阅读 7 分钟
2.9k
序本文主要研究一下promtail的ClientClientloki/pkg/promtail/client/client.go {代码...} Client接口内嵌了api.EntryHandler接口,定义了Stop方法EntryHandlerloki/pkg/promtail/api/types.go {代码...} EntryHandler接口定义了Handle方法clientloki/pkg/promtail/client/client.go {代码...} client定义了logger、cfg...

聊聊gorm的GroupBy

2021-01-19
阅读 3 分钟
2.6k
gorm的GroupBy定义了Columns和Having属性,其Build方法遍历Columns,最后针对Having在拼接Having子句。

聊聊gorm的Locking

2021-01-18
阅读 2 分钟
2.4k
Locking定义了Strength、Table、Options属性;Build方法先追加Strength,后面根据Table、Options属性追加语句

聊聊gorm的OnConflict

2021-01-17
阅读 5 分钟
4.9k
OnConflict定义了Columns、Where、OnConstraint、DoNothing、DoUpdates、UpdateAll属性;Build方法会根据这些属性拼装sql,如果是DoNothing则追加DO NOTHING,否则追加DO UPDATE SET

聊聊gorm的CreateInBatches

2021-01-16
阅读 3 分钟
10.3k
CreateInBatches会根据batchSize来分配进行create,但是他们是在同一个事务的,其rowsAffected是每个批次的rowsAffected的累加

聊聊gorm的Unscoped

2021-01-15
阅读 3 分钟
4.4k
序本文主要研究一下gorm的UnscopedUnscopedgorm.io/gorm@v1.20.11/chainable_api.go {代码...} Unscoped方法设置tx.Statement.Unscoped为trueDeletegorm.io/gorm@v1.20.11/callbacks/delete.go {代码...} callbacks的Delete方法在db.Statement.Unscoped为false的时候才追加db.Statement.Schema.DeleteClausesDeleteClaus...

聊聊gorm的prometheus

2021-01-13
阅读 4 分钟
2.5k
gorm.io/plugin/prometheus@v0.0.0-20201023060415-b0e68fc269af/prometheus.go

聊聊gorm的Transaction

2021-01-12
阅读 2 分钟
7.8k
DB的Transaction方法针对非TxCommitter类型的db.Statement.ConnPool执行db.Begin,之后注册defer针对panicked或者err的执行tx.Rollback(),执行fc之后,判断err为nil的情况下执行tx.Commit(),并将Error赋值为err

聊聊gorm的IsolationLevel

2021-01-11
阅读 4 分钟
6.1k
golang定义了IsolationLevel,分别为LevelDefault、LevelReadUncommitted、LevelReadCommitted、LevelWriteCommitted、LevelRepeatableRead、LevelSnapshot、LevelSerializable、LevelLinearizable

聊聊gorm的DeletedAt

2021-01-09
阅读 5 分钟
6.1k
DeletedAt为sql.NullTime类型,它实现了Scanner接口的Scan方法,实现了Valuer接口的Value方法;同时定义了MarshalJSON、UnmarshalJSON方法,还定义了QueryClauses方法,使用的是SoftDeleteQueryClause;DeleteClauses方法使用的是SoftDeleteDeleteClause

聊聊gorm的Model

2021-01-08
阅读 21 分钟
4k
序本文主要研究一下gorm的ModelModelgorm.io/gorm@v1.20.10/model.go {代码...} Model定义了ID、CreatedAt、UpdatedAt、DeletedAt属性ParseFieldgorm.io/gorm@v1.20.10/schema/field.go {代码...} ParseField方法会解析field的属性,如果field的name为CreatedAt或者UpdatedAt,且dataType为Time、Int、Unit或者tag标注了...

聊聊zerolog的Hook

2021-01-07
阅读 4 分钟
3.7k
序本文主要研究一下zerolog的HookHookgithub.com/rs/zerolog@v1.20.0/hook.go {代码...} Hook接口定义了Run方法,它接收event、level、message参数LevelHookgithub.com/rs/zerolog@v1.20.0/hook.go {代码...} LevelHook定义了各种level的hook,其Run方法根据指定的level执行指定的hookHookFuncgithub.com/rs/zerolog@v1....

聊聊zerolog的Formatter

2021-01-06
阅读 3 分钟
2.2k
序本文主要研究一下zerolog的FormatterFormattergithub.com/rs/zerolog@v1.20.0/console.go {代码...} Formatter接口定义了一个func用于将interface{}转换为stringConsoleWritergithub.com/rs/zerolog@v1.20.0/console.go {代码...} ConsoleWriter定义了TimeFormat、FormatTimestamp、FormatLevel、FormatCaller、Format...

聊聊zerolog的diode.Writer

2021-01-05
阅读 6 分钟
2.6k
diode.Writer是一个lock-free,non-blocking及thread safe的Writer;它借助了diodes来实现;NewWriter会创建diode.Writer,并启动dw.poll()

聊聊zerolog的encoder

2021-01-04
阅读 7 分钟
1.8k
序本文主要研究一下zerolog的encoderencodergithub.com/rs/zerolog@v1.20.0/encoder.go {代码...} encoder接口定义了一系列的Append方法AppendMarkergithub.com/rs/zerolog@v1.20.0/internal/json/types.go {代码...} AppendBeginMarker及AppendEndMarker用于追加map start和endAppendArraygithub.com/rs/zerolog@v1.20....

聊聊zerolog的Level

2021-01-03
阅读 4 分钟
2.5k
Level为int8类型,其中trace最小为-1,之后是debug、info、warn、error、fatal、panic、NoLevel及Disabled

聊聊zerolog的LevelWriter

2021-01-02
阅读 3 分钟
2.5k
序本文主要研究一下zerolog的LevelWriterLevelWritergithub.com/rs/zerolog@v1.20.0/writer.go {代码...} LevelWriter接口内嵌了io.Writer接口,定义了WriteLevel方法levelWriterAdaptergithub.com/rs/zerolog@v1.20.0/writer.go {代码...} levelWriterAdapter内嵌了io.Writer属性,实现了LevelWriter的WriteLevel方法,...

聊聊zerolog的send

2021-01-01
阅读 3 分钟
2.9k
序本文主要研究一下zerolog的send实例 {代码...} 使用Send或者Msg来发送log输出 {代码...} Sendgithub.com/rs/zerolog@v1.20.0/event.go {代码...} Send方法相当于Msg("")msggithub.com/rs/zerolog@v1.20.0/event.go {代码...} msg方法先执行hook,之后对于有msg的添加message字段,如果done不为nil则defer注册回调,之...

2020年终总结

2020-12-31
阅读 1 分钟
2.6k
canal、mysql-binlog-connector-java、maxwell、debezium、rocketmq-mysql、SpinalTap、puma、Otter、kingbus研究

聊聊klog的klogger

2020-12-30
阅读 6 分钟
3.1k
logr类似java的slf4j,其Logger接口定义了Enabled、Info、Error、V、WithValues、WithName方法