Skip to content

Commit

Permalink
ドキュメント更新
Browse files Browse the repository at this point in the history
  • Loading branch information
wtks committed Dec 7, 2024
1 parent 463f60b commit 960bb24
Show file tree
Hide file tree
Showing 7 changed files with 14 additions and 26 deletions.
2 changes: 0 additions & 2 deletions bench/benchmarker/scenario/prevalidation.go
Original file line number Diff line number Diff line change
Expand Up @@ -288,8 +288,6 @@ func validateSuccessFlow(ctx context.Context, clientConfig webapp.ClientConfig)
requestID = result.RideID
}

// TODO: 登録された直後の椅子の状態を確認する

// GET /api/app/notifications
{
for result, err := range userClient.AppGetNotification(ctx) {
Expand Down
29 changes: 10 additions & 19 deletions bench/benchmarker/world/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ import (
type RequestDB struct {
counter int
m map[RequestID]*Request
m2 map[string]*Request
lock sync.RWMutex
}

func NewRequestDB() *RequestDB {
return &RequestDB{
m: make(map[RequestID]*Request),
m: map[RequestID]*Request{},
m2: map[string]*Request{},
}
}

Expand All @@ -25,6 +27,7 @@ func (db *RequestDB) Create(req *Request) *Request {
db.counter++
req.ID = RequestID(db.counter)
db.m[req.ID] = req
db.m2[req.ServerID] = req
return req
}

Expand All @@ -37,14 +40,7 @@ func (db *RequestDB) Get(id RequestID) *Request {
func (db *RequestDB) GetByServerID(serverID string) *Request {
db.lock.RLock()
defer db.lock.RUnlock()

// TODO ハッシュマップで持って引くように
for _, req := range db.m {
if req.ServerID == serverID {
return req
}
}
return nil
return db.m2[serverID]
}

func (db *RequestDB) Iter() iter.Seq2[RequestID, *Request] {
Expand Down Expand Up @@ -89,12 +85,14 @@ type DBEntry[K ~int] interface {
type GenericDB[K ~int, V DBEntry[K]] struct {
counter int
m map[K]V
m2 map[string]V
lock sync.RWMutex
}

func NewGenericDB[K ~int, V DBEntry[K]]() *GenericDB[K, V] {
return &GenericDB[K, V]{
m: map[K]V{},
m: map[K]V{},
m2: map[string]V{},
}
}

Expand All @@ -105,6 +103,7 @@ func (db *GenericDB[K, V]) Create(v V) V {
db.counter++
v.SetID(K(db.counter))
db.m[K(db.counter)] = v
db.m2[v.GetServerID()] = v
return v
}

Expand All @@ -115,17 +114,9 @@ func (db *GenericDB[K, V]) Get(id K) V {
}

func (db *GenericDB[K, V]) GetByServerID(serverID string) V {
var zero V
db.lock.RLock()
defer db.lock.RUnlock()

// TODO ハッシュマップで持って引くように
for _, req := range db.m {
if req.GetServerID() == serverID {
return req
}
}
return zero
return db.m2[serverID]
}

func (db *GenericDB[K, V]) Iter() iter.Seq2[K, V] {
Expand Down
1 change: 0 additions & 1 deletion bench/benchmarker/world/region.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ func (r *Region) RangeY() (bottom, top int) {

// UserSatisfactionScore 地域内のユーザーの満足度
func (r *Region) UserSatisfactionScore() int {
// TODO: 検討
// 地域内の全ユーザーの平均評価の平均値を地域のユーザー満足度にしている
// (ユーザーの評価の初期値は0)
return int(math.Round(float64(r.TotalEvaluation.Load()) / float64(r.UsersDB.Len())))
Expand Down
1 change: 0 additions & 1 deletion bench/benchmarker/world/request.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,6 @@ func (r *Request) CalculateEvaluation() Evaluation {
panic("計算に必要な時間情報が足りていない状況なのに評価値を計算しようとしている")
}

// TODO: いい感じにする
result := Evaluation{}
{
// マッチング待ち時間評価
Expand Down
1 change: 0 additions & 1 deletion bench/benchmarker/world/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,6 @@ func (u *User) Tick(ctx *Context) error {
}

// リクエストを作成する
// TODO 作成する条件・頻度
err = u.CreateRequest(ctx)
if err != nil {
return err
Expand Down
4 changes: 3 additions & 1 deletion docs/ISURIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,12 +160,14 @@ data: {"ride_id":"01JEG4X2TZSE169T99XERS990M","user":{"id":"01JEG4W4E1QF0ZA1YY4B
1. `/home/isucon/env.sh` を編集し、`ISUCON_MATCHING_INTERVAL` の値を変更します。
2. `sudo systemctl restart isuride-matcher.service` でサービスを再起動します。

なお、`GET /api/internal/matching`はインターネットには公開されず、ISURIDE 内部で利用される想定のエンドポイントであるため、自由に利用方法及び仕様を変更して構いません。

## 決済マイクロサービス
ISURIDEを利用して目的地に到着した際、ユーザーは椅子の利用料金を支払う必要があります。
この支払い処理は社内の決済マイクロサービスを使用していますが、現在そのインフラが不安定なためリクエストが集中すると決済処理の途中でサーバーからのレスポンスが失われる可能性があります。
そのためリファレンス実装ではリクエストが失敗した場合は支払履歴を確認し、支払処理が完了していないことを確認した場合にはリクエストをリトライする実装となっています。
ただし既に支払い処理が開始されている場合、後述する`Idempotency-Key`ヘッダを使用せずにリトライを行うと、複数回の支払いが発生しエラーとなります。
<!-- TODO: APIについては /path/to/openapi.yaml を参照する旨を記載 -->
決済マイクロサービスのAPIの詳細については`/home/isucon/webapp/payment_mock/openapi.yaml`を参照してください。

### Idempotency-Key ヘッダを利用したリクエストの重複防止
決済マイクロサービスでは、`Idempotency-Key`ヘッダを利用して決済の重複を防ぐことができます。
Expand Down
2 changes: 1 addition & 1 deletion webapp/payment_mock/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ servers:
- url: "http://localhost:8081/"
description: api
paths:
/payment:
/payments:
post:
summary: 決済を行う
description: ""
Expand Down

0 comments on commit 960bb24

Please sign in to comment.