聊聊dubbo-go-proxy的replacePathFilter

2021-02-08
阅读 2 分钟
1.7k
replacePathFilter定义了path属性;它实现了Filter的Do方法,该方法执行的是doReplacePathFilter方法,它会往header写入名为ReplacedPathHeader,若req.URL.RawPath为空则取req.URL.Path;之后将req.URL.RawPath更新为f.path,再通过url.PathUnescape(req.URL.RawPath)计算req.URL.Path,最后将req.URL.RequestURI()赋值...

聊聊dubbo-go-proxy的remoteFilter

2021-02-07
阅读 3 分钟
1.6k
clientFilter往extension注册了名为dgp.filters.remote_call的filter func;该func执行的是Do方法

聊聊dubbo-go-proxy的timeoutFilter

2021-02-06
阅读 3 分钟
1.9k
timeoutFilter往extension设置了名为`dgp.filters.timeout的timeoutFilterFunc,默认的timeout为1s;timeoutFilterFunc执行的是timeoutFilter的Do方法

聊聊dubbo-go-proxy的recoveryFilter

2021-02-05
阅读 1 分钟
2k
recoveryFilter往extension注册名为dgp.filters.recovery的recoveryFilterFunc;该func执行的是recoveryFilter的Do方法

聊聊dubbo-go-proxy的authorityFilter

2021-02-04
阅读 2 分钟
1.9k
authorityFilter往extension设置了名为dgp.filters.http.authority_filter的authorityFilterFunc;该func执行的是authorityFilter.Do方法

聊聊dubbo-go-proxy的loggerFilter

2021-02-03
阅读 2 分钟
1.6k
loggerFilter的Init方法往extension设置了loggerFilterFunc,该context.FilterFunc执行loggerFilter的Do方法

聊聊dubbo-go-proxy的AccessLogFilter

2021-02-02
阅读 6 分钟
1.6k
init方法通过extension.SetFilterFunc注册了名为constant.AccessLogFilter的context.FilterFunc,然后执行accessLogWriter.Write();accessLog方法返回context.FilterFunc,该func通过buildAccessLogMsg构建accessLogMsg,然后执行accessLogWriter.Writer

聊聊dubbo-go-proxy的ParamMapper

2021-02-01
阅读 5 分钟
1.7k
序本文主要研究一下dubbo-go-proxy的ParamMapperParamMapperdubbo-go-proxy/pkg/client/mapper.go {代码...} ParamMapper接口定义了Map方法headerMapperdubbo-go-proxy/pkg/client/http/mapper.go {代码...} headerMapper实现了ParamMapper接口,其Map方法提取和映射headeruriMapperdubbo-go-proxy/pkg/client/http/mapp...

聊聊dubbo-go-proxy的Client

2021-01-31
阅读 4 分钟
1.6k
序本文主要研究一下dubbo-go-proxy的ClientClientdubbo-go-proxy/pkg/client/client.go {代码...} Client接口定义了Init、Close、Call、MapParams方法Clientdubbo-go-proxy/pkg/client/dubbo/dubbo.go {代码...} Client定义了lock、GenericServicePool属性,它实现了Client接口Initdubbo-go-proxy/pkg/client/dubbo/dubb...

聊聊tempo的ExclusiveQueues

2021-01-30
阅读 2 分钟
1.8k
序本文主要研究一下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.8k
序本文主要研究一下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.6k
序本文主要研究一下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.1k
github.com/cortexproject/cortex/pkg/ring/kv/memberlist/memberlist_client.go

聊聊cortex的ReadRing

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

聊聊cortex的Distributor

2021-01-25
阅读 12 分钟
2k
序本文主要研究一下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.1k
Ingester接口内嵌了client.IngesterServer,定义了FlushHandler、ShutdownHandler、Push方法

聊聊cortex的tenant

2021-01-23
阅读 5 分钟
1.7k
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.5k
序本文主要研究一下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.8k
序本文主要研究一下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.4k
gorm的GroupBy定义了Columns和Having属性,其Build方法遍历Columns,最后针对Having在拼接Having子句。

聊聊gorm的Locking

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

聊聊gorm的OnConflict

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

聊聊gorm的CreateInBatches

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

聊聊gorm的Unscoped

2021-01-15
阅读 3 分钟
4.3k
序本文主要研究一下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.4k
gorm.io/plugin/prometheus@v0.0.0-20201023060415-b0e68fc269af/prometheus.go

聊聊gorm的Transaction

2021-01-12
阅读 2 分钟
7.6k
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 分钟
5.9k
golang定义了IsolationLevel,分别为LevelDefault、LevelReadUncommitted、LevelReadCommitted、LevelWriteCommitted、LevelRepeatableRead、LevelSnapshot、LevelSerializable、LevelLinearizable

聊聊gorm的DeletedAt

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

聊聊gorm的Model

2021-01-08
阅读 21 分钟
3.9k
序本文主要研究一下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标注了...