mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
897 B
42 lines
897 B
// Copyright 2023 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package queue |
|
|
|
import ( |
|
"context" |
|
"time" |
|
) |
|
|
|
var pushBlockTime = 5 * time.Second |
|
|
|
type baseQueue interface { |
|
PushItem(ctx context.Context, data []byte) error |
|
PopItem(ctx context.Context) ([]byte, error) |
|
HasItem(ctx context.Context, data []byte) (bool, error) |
|
Len(ctx context.Context) (int, error) |
|
Close() error |
|
RemoveAll(ctx context.Context) error |
|
} |
|
|
|
func popItemByChan(ctx context.Context, popItemFn func(ctx context.Context) ([]byte, error)) (chanItem chan []byte, chanErr chan error) { |
|
chanItem = make(chan []byte) |
|
chanErr = make(chan error) |
|
go func() { |
|
for { |
|
it, err := popItemFn(ctx) |
|
if err != nil { |
|
close(chanItem) |
|
chanErr <- err |
|
return |
|
} |
|
if it == nil { |
|
close(chanItem) |
|
close(chanErr) |
|
return |
|
} |
|
chanItem <- it |
|
} |
|
}() |
|
return chanItem, chanErr |
|
}
|
|
|