chore: execute goimports to format the code (#7983)

* chore: execute goimports to format the code

Signed-off-by: promalert <promalert@outlook.com>

* goimports -w .

---------

Signed-off-by: promalert <promalert@outlook.com>
Co-authored-by: Chris Lu <chris.lu@gmail.com>
This commit is contained in:
promalert
2026-01-08 05:06:08 +08:00
committed by GitHub
parent 6432019d08
commit 9012069bd7
271 changed files with 608 additions and 461 deletions

View File

@@ -3,13 +3,14 @@ package main
import ( import (
"flag" "flag"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/other/mq_client_example/example"
"github.com/seaweedfs/seaweedfs/weed/mq/client/agent_client"
"github.com/seaweedfs/seaweedfs/weed/mq/schema"
"log" "log"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/seaweedfs/seaweedfs/other/mq_client_example/example"
"github.com/seaweedfs/seaweedfs/weed/mq/client/agent_client"
"github.com/seaweedfs/seaweedfs/weed/mq/schema"
) )
var ( var (

View File

@@ -3,13 +3,14 @@ package main
import ( import (
"flag" "flag"
"fmt" "fmt"
"log"
"time"
"github.com/seaweedfs/seaweedfs/other/mq_client_example/example" "github.com/seaweedfs/seaweedfs/other/mq_client_example/example"
"github.com/seaweedfs/seaweedfs/weed/mq/client/agent_client" "github.com/seaweedfs/seaweedfs/weed/mq/client/agent_client"
"github.com/seaweedfs/seaweedfs/weed/mq/topic" "github.com/seaweedfs/seaweedfs/weed/mq/topic"
"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" "github.com/seaweedfs/seaweedfs/weed/pb/schema_pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"log"
"time"
) )
var ( var (

View File

@@ -419,7 +419,7 @@ func (c *Client) Read(ctx context.Context, req *ReadRequest) (*ReadResponse, err
}).Info("✅ RDMA read completed successfully") }).Info("✅ RDMA read completed successfully")
// MOCK DATA IMPLEMENTATION - FOR DEVELOPMENT/TESTING ONLY // MOCK DATA IMPLEMENTATION - FOR DEVELOPMENT/TESTING ONLY
// //
// This section generates placeholder data for the mock RDMA implementation. // This section generates placeholder data for the mock RDMA implementation.
// In a production RDMA implementation, this should be replaced with: // In a production RDMA implementation, this should be replaced with:
// //
@@ -472,7 +472,7 @@ func (c *Client) ReadFileRange(ctx context.Context, fileID string, offset, size
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid file ID %s: %w", fileID, err) return nil, fmt.Errorf("invalid file ID %s: %w", fileID, err)
} }
req := &ReadRequest{ req := &ReadRequest{
VolumeID: volumeID, VolumeID: volumeID,
NeedleID: needleID, NeedleID: needleID,

View File

@@ -8,6 +8,7 @@ import (
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
"strings"
"time" "time"
"seaweedfs-rdma-sidecar/pkg/rdma" "seaweedfs-rdma-sidecar/pkg/rdma"

View File

@@ -7,10 +7,11 @@
package proto package proto
import ( import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect" reflect "reflect"
sync "sync" sync "sync"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
) )
const ( const (

View File

@@ -3,6 +3,7 @@ package fuse_test
import ( import (
"fmt" "fmt"
"io/fs" "io/fs"
"net"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"

View File

@@ -3,5 +3,5 @@ package fuse_test
import "testing" import "testing"
func TestMinimal(t *testing.T) { func TestMinimal(t *testing.T) {
t.Log("minimal test") t.Log("minimal test")
} }

View File

@@ -152,7 +152,7 @@ func testTwoConsumersRebalance(t *testing.T, addr, topicName, groupID string) {
// Wait for rebalancing to occur - both consumers should get new assignments // Wait for rebalancing to occur - both consumers should get new assignments
var rebalancedAssignment1, rebalancedAssignment2 []int32 var rebalancedAssignment1, rebalancedAssignment2 []int32
// Consumer1 should get a rebalance assignment // Consumer1 should get a rebalance assignment
select { select {
case partitions := <-handler1.assignments: case partitions := <-handler1.assignments:
@@ -372,7 +372,7 @@ func testMultipleConsumersJoin(t *testing.T, addr, topicName, groupID string) {
t.Errorf("Partition %d assigned to multiple consumers", partition) t.Errorf("Partition %d assigned to multiple consumers", partition)
} }
} }
// Each consumer should get exactly 1 partition (4 partitions / 4 consumers) // Each consumer should get exactly 1 partition (4 partitions / 4 consumers)
if len(assignment) != 1 { if len(assignment) != 1 {
t.Errorf("Consumer%d should get exactly 1 partition, got %d", i, len(assignment)) t.Errorf("Consumer%d should get exactly 1 partition, got %d", i, len(assignment))
@@ -408,7 +408,7 @@ func (h *RebalanceTestHandler) Setup(session sarama.ConsumerGroupSession) error
h.readyOnce.Do(func() { h.readyOnce.Do(func() {
close(h.ready) close(h.ready)
}) })
// Send partition assignment // Send partition assignment
partitions := make([]int32, 0) partitions := make([]int32, 0)
for topic, partitionList := range session.Claims() { for topic, partitionList := range session.Claims() {
@@ -417,13 +417,13 @@ func (h *RebalanceTestHandler) Setup(session sarama.ConsumerGroupSession) error
partitions = append(partitions, partition) partitions = append(partitions, partition)
} }
} }
select { select {
case h.assignments <- partitions: case h.assignments <- partitions:
default: default:
// Channel might be full, that's ok // Channel might be full, that's ok
} }
return nil return nil
} }

View File

@@ -86,7 +86,7 @@ func TestSchemaEndToEnd_AvroRoundTrip(t *testing.T) {
// Verify all fields // Verify all fields
assert.Equal(t, int32(12345), decodedMap["id"]) assert.Equal(t, int32(12345), decodedMap["id"])
assert.Equal(t, "Alice Johnson", decodedMap["name"]) assert.Equal(t, "Alice Johnson", decodedMap["name"])
// Verify union fields // Verify union fields
emailUnion, ok := decodedMap["email"].(map[string]interface{}) emailUnion, ok := decodedMap["email"].(map[string]interface{})
require.True(t, ok, "Email should be a union") require.True(t, ok, "Email should be a union")
@@ -126,7 +126,7 @@ func TestSchemaEndToEnd_ProtobufRoundTrip(t *testing.T) {
require.Equal(t, uint32(2), envelope.SchemaID, "Schema ID should match") require.Equal(t, uint32(2), envelope.SchemaID, "Schema ID should match")
// Note: ParseConfluentEnvelope defaults to FormatAvro; format detection requires schema registry // Note: ParseConfluentEnvelope defaults to FormatAvro; format detection requires schema registry
require.Equal(t, schema.FormatAvro, envelope.Format, "Format defaults to Avro without schema registry lookup") require.Equal(t, schema.FormatAvro, envelope.Format, "Format defaults to Avro without schema registry lookup")
// For Protobuf with indexes, we need to use the specialized parser // For Protobuf with indexes, we need to use the specialized parser
protobufEnvelope, ok := schema.ParseConfluentProtobufEnvelopeWithIndexCount(confluentMsg, 1) protobufEnvelope, ok := schema.ParseConfluentProtobufEnvelopeWithIndexCount(confluentMsg, 1)
require.True(t, ok, "Message should be a valid Protobuf envelope") require.True(t, ok, "Message should be a valid Protobuf envelope")
@@ -269,7 +269,6 @@ func createMockSchemaRegistryForE2E(t *testing.T) *httptest.Server {
})) }))
} }
func getUserAvroSchemaForE2E() string { func getUserAvroSchemaForE2E() string {
return `{ return `{
"type": "record", "type": "record",

View File

@@ -5,7 +5,7 @@ import (
) )
// TestConsumerStallingPattern is a REPRODUCER for the consumer stalling bug. // TestConsumerStallingPattern is a REPRODUCER for the consumer stalling bug.
// //
// This test simulates the exact pattern that causes consumers to stall: // This test simulates the exact pattern that causes consumers to stall:
// 1. Consumer reads messages in batches // 1. Consumer reads messages in batches
// 2. Consumer commits offset after each batch // 2. Consumer commits offset after each batch
@@ -24,7 +24,7 @@ import (
// If the test PASSES, it means consumer successfully fetches all messages (bug fixed) // If the test PASSES, it means consumer successfully fetches all messages (bug fixed)
func TestConsumerStallingPattern(t *testing.T) { func TestConsumerStallingPattern(t *testing.T) {
t.Skip("REPRODUCER TEST: Requires running load test infrastructure. See comments for setup.") t.Skip("REPRODUCER TEST: Requires running load test infrastructure. See comments for setup.")
// This test documents the exact stalling pattern: // This test documents the exact stalling pattern:
// - Consumers consume messages 0-163, commit offset 163 // - Consumers consume messages 0-163, commit offset 163
// - Next iteration: fetch offset 164+ // - Next iteration: fetch offset 164+
@@ -36,7 +36,7 @@ func TestConsumerStallingPattern(t *testing.T) {
// 2. Empty fetch doesn't mean "end of partition" (could be transient) // 2. Empty fetch doesn't mean "end of partition" (could be transient)
// 3. Consumer retries on empty fetch instead of giving up // 3. Consumer retries on empty fetch instead of giving up
// 4. Logging shows why fetch stopped // 4. Logging shows why fetch stopped
t.Logf("=== CONSUMER STALLING REPRODUCER ===") t.Logf("=== CONSUMER STALLING REPRODUCER ===")
t.Logf("") t.Logf("")
t.Logf("Setup Steps:") t.Logf("Setup Steps:")
@@ -72,27 +72,27 @@ func TestConsumerStallingPattern(t *testing.T) {
// This is a UNIT reproducer that can run standalone // This is a UNIT reproducer that can run standalone
func TestOffsetPlusOneCalculation(t *testing.T) { func TestOffsetPlusOneCalculation(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
committedOffset int64 committedOffset int64
expectedNextOffset int64 expectedNextOffset int64
}{ }{
{"Offset 0", 0, 1}, {"Offset 0", 0, 1},
{"Offset 99", 99, 100}, {"Offset 99", 99, 100},
{"Offset 163", 163, 164}, // The exact stalling point! {"Offset 163", 163, 164}, // The exact stalling point!
{"Offset 999", 999, 1000}, {"Offset 999", 999, 1000},
{"Large offset", 10000, 10001}, {"Large offset", 10000, 10001},
} }
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
// This is the critical calculation // This is the critical calculation
nextOffset := tc.committedOffset + 1 nextOffset := tc.committedOffset + 1
if nextOffset != tc.expectedNextOffset { if nextOffset != tc.expectedNextOffset {
t.Fatalf("OFFSET MATH BUG: committed=%d, next=%d (expected %d)", t.Fatalf("OFFSET MATH BUG: committed=%d, next=%d (expected %d)",
tc.committedOffset, nextOffset, tc.expectedNextOffset) tc.committedOffset, nextOffset, tc.expectedNextOffset)
} }
t.Logf("✓ offset %d → next fetch at %d", tc.committedOffset, nextOffset) t.Logf("✓ offset %d → next fetch at %d", tc.committedOffset, nextOffset)
}) })
} }
@@ -105,18 +105,18 @@ func TestEmptyFetchShouldNotStopConsumer(t *testing.T) {
// Scenario: Consumer committed offset 163, then fetches 164+ // Scenario: Consumer committed offset 163, then fetches 164+
committedOffset := int64(163) committedOffset := int64(163)
nextFetchOffset := committedOffset + 1 nextFetchOffset := committedOffset + 1
// First attempt: get empty (transient - data might not be available yet) // First attempt: get empty (transient - data might not be available yet)
// WRONG behavior (bug): Consumer sees 0 bytes and stops // WRONG behavior (bug): Consumer sees 0 bytes and stops
// wrongConsumerLogic := (firstFetchResult == 0) // gives up! // wrongConsumerLogic := (firstFetchResult == 0) // gives up!
// CORRECT behavior: Consumer should retry // CORRECT behavior: Consumer should retry
correctConsumerLogic := true // continues retrying correctConsumerLogic := true // continues retrying
if !correctConsumerLogic { if !correctConsumerLogic {
t.Fatalf("Consumer incorrectly gave up after empty fetch at offset %d", nextFetchOffset) t.Fatalf("Consumer incorrectly gave up after empty fetch at offset %d", nextFetchOffset)
} }
t.Logf("✓ Empty fetch doesn't stop consumer, continues retrying") t.Logf("✓ Empty fetch doesn't stop consumer, continues retrying")
}) })
} }

View File

@@ -7,11 +7,12 @@
package pb package pb
import ( import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect" reflect "reflect"
sync "sync" sync "sync"
unsafe "unsafe" unsafe "unsafe"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
) )
const ( const (

View File

@@ -205,4 +205,3 @@ func TestResumeMillionRecords_Fixed(t *testing.T) {
glog.Infof("🏆 MILLION RECORD KAFKA INTEGRATION TEST COMPLETED SUCCESSFULLY!") glog.Infof("🏆 MILLION RECORD KAFKA INTEGRATION TEST COMPLETED SUCCESSFULLY!")
} }

View File

@@ -16,7 +16,7 @@ func TestGatewayBasicFunctionality(t *testing.T) {
defer gateway.CleanupAndClose() defer gateway.CleanupAndClose()
addr := gateway.StartAndWait() addr := gateway.StartAndWait()
// Give the gateway a bit more time to be fully ready // Give the gateway a bit more time to be fully ready
time.Sleep(200 * time.Millisecond) time.Sleep(200 * time.Millisecond)
@@ -32,17 +32,17 @@ func TestGatewayBasicFunctionality(t *testing.T) {
func testGatewayAcceptsConnections(t *testing.T, addr string) { func testGatewayAcceptsConnections(t *testing.T, addr string) {
// Test basic TCP connection to gateway // Test basic TCP connection to gateway
t.Logf("Testing connection to gateway at %s", addr) t.Logf("Testing connection to gateway at %s", addr)
conn, err := net.DialTimeout("tcp", addr, 5*time.Second) conn, err := net.DialTimeout("tcp", addr, 5*time.Second)
if err != nil { if err != nil {
t.Fatalf("Failed to connect to gateway: %v", err) t.Fatalf("Failed to connect to gateway: %v", err)
} }
defer conn.Close() defer conn.Close()
// Test that we can establish a connection and the gateway is listening // Test that we can establish a connection and the gateway is listening
// We don't need to send a full Kafka request for this basic test // We don't need to send a full Kafka request for this basic test
t.Logf("Successfully connected to gateway at %s", addr) t.Logf("Successfully connected to gateway at %s", addr)
// Optional: Test that we can write some data without error // Optional: Test that we can write some data without error
testData := []byte("test") testData := []byte("test")
conn.SetWriteDeadline(time.Now().Add(1 * time.Second)) conn.SetWriteDeadline(time.Now().Add(1 * time.Second))
@@ -57,19 +57,19 @@ func testGatewayRefusesAfterClose(t *testing.T, gateway *testutil.GatewayTestSer
// Get the address from the gateway's listener // Get the address from the gateway's listener
host, port := gateway.GetListenerAddr() host, port := gateway.GetListenerAddr()
addr := fmt.Sprintf("%s:%d", host, port) addr := fmt.Sprintf("%s:%d", host, port)
// Close the gateway // Close the gateway
gateway.CleanupAndClose() gateway.CleanupAndClose()
t.Log("Testing that gateway refuses connections after close") t.Log("Testing that gateway refuses connections after close")
// Attempt to connect - should fail // Attempt to connect - should fail
conn, err := net.DialTimeout("tcp", addr, 2*time.Second) conn, err := net.DialTimeout("tcp", addr, 2*time.Second)
if err == nil { if err == nil {
conn.Close() conn.Close()
t.Fatal("Expected connection to fail after gateway close, but it succeeded") t.Fatal("Expected connection to fail after gateway close, but it succeeded")
} }
// Verify it's a connection refused error // Verify it's a connection refused error
if !strings.Contains(err.Error(), "connection refused") && !strings.Contains(err.Error(), "connect: connection refused") { if !strings.Contains(err.Error(), "connection refused") && !strings.Contains(err.Error(), "connect: connection refused") {
t.Logf("Connection failed as expected with error: %v", err) t.Logf("Connection failed as expected with error: %v", err)

View File

@@ -63,11 +63,11 @@ const (
autoChunkSize = 8 * 1024 * 1024 autoChunkSize = 8 * 1024 * 1024
// Test sizes // Test sizes
smallFileSize = 1 * 1024 // 1KB - single chunk smallFileSize = 1 * 1024 // 1KB - single chunk
mediumFileSize = 256 * 1024 // 256KB - single chunk (at threshold) mediumFileSize = 256 * 1024 // 256KB - single chunk (at threshold)
largeFileSize = 10 * 1024 * 1024 // 10MB - triggers auto-chunking (2 chunks) largeFileSize = 10 * 1024 * 1024 // 10MB - triggers auto-chunking (2 chunks)
xlFileSize = 25 * 1024 * 1024 // 25MB - triggers auto-chunking (4 chunks) xlFileSize = 25 * 1024 * 1024 // 25MB - triggers auto-chunking (4 chunks)
multipartSize = 5 * 1024 * 1024 // 5MB per part for multipart uploads multipartSize = 5 * 1024 * 1024 // 5MB per part for multipart uploads
) )
// ETag format patterns // ETag format patterns
@@ -540,4 +540,3 @@ func TestMultipleLargeFileUploads(t *testing.T) {
assert.NoError(t, err, "File %d ETag should be valid hex", i) assert.NoError(t, err, "File %d ETag should be valid hex", i)
} }
} }

View File

@@ -443,7 +443,7 @@ func TestS3IAMBucketPolicyIntegration(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, testObjectData, string(data)) assert.Equal(t, testObjectData, string(data))
result.Body.Close() result.Body.Close()
// Clean up bucket policy after this test // Clean up bucket policy after this test
_, err = adminClient.DeleteBucketPolicy(&s3.DeleteBucketPolicyInput{ _, err = adminClient.DeleteBucketPolicy(&s3.DeleteBucketPolicyInput{
Bucket: aws.String(bucketName), Bucket: aws.String(bucketName),
@@ -481,7 +481,7 @@ func TestS3IAMBucketPolicyIntegration(t *testing.T) {
assert.Contains(t, *policyResult.Policy, "Deny") assert.Contains(t, *policyResult.Policy, "Deny")
// NOTE: Enforcement test is commented out due to known architectural limitation: // NOTE: Enforcement test is commented out due to known architectural limitation:
// //
// KNOWN LIMITATION: DeleteObject uses the coarse-grained ACTION_WRITE constant, // KNOWN LIMITATION: DeleteObject uses the coarse-grained ACTION_WRITE constant,
// which convertActionToS3Format maps to "s3:PutObject" (not "s3:DeleteObject"). // which convertActionToS3Format maps to "s3:PutObject" (not "s3:DeleteObject").
// This means the policy engine evaluates the deny policy against "s3:PutObject", // This means the policy engine evaluates the deny policy against "s3:PutObject",
@@ -499,7 +499,7 @@ func TestS3IAMBucketPolicyIntegration(t *testing.T) {
// awsErr, ok := err.(awserr.Error) // awsErr, ok := err.(awserr.Error)
// require.True(t, ok, "Error should be an awserr.Error") // require.True(t, ok, "Error should be an awserr.Error")
// assert.Equal(t, "AccessDenied", awsErr.Code(), "Expected AccessDenied error code") // assert.Equal(t, "AccessDenied", awsErr.Code(), "Expected AccessDenied error code")
// Clean up bucket policy after this test // Clean up bucket policy after this test
_, err = adminClient.DeleteBucketPolicy(&s3.DeleteBucketPolicyInput{ _, err = adminClient.DeleteBucketPolicy(&s3.DeleteBucketPolicyInput{
Bucket: aws.String(bucketName), Bucket: aws.String(bucketName),

View File

@@ -2,12 +2,13 @@ package main
import ( import (
"context" "context"
"time"
"github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/retry" "github.com/aws/aws-sdk-go-v2/aws/retry"
"github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/s3"
"time"
) )
func main() { func main() {

View File

@@ -502,4 +502,3 @@ func TestGitHub7562LargeFile(t *testing.T) {
t.Log("Large file test passed!") t.Log("Large file test passed!")
} }

View File

@@ -518,4 +518,3 @@ func TestMultipartUploadDeleteMarkerListBehavior(t *testing.T) {
t.Logf("Object restored after delete marker removal, ETag=%s", multipartETag) t.Logf("Object restored after delete marker removal, ETag=%s", multipartETag)
} }

View File

@@ -319,4 +319,3 @@ func listAllVersions(t *testing.T, client *s3.Client, bucketName, objectKey stri
t.Logf("Total: %d versions in %d pages", len(allVersions), pageCount) t.Logf("Total: %d versions in %d pages", len(allVersions), pageCount)
return allVersions return allVersions
} }

View File

@@ -540,11 +540,11 @@ func TestPathEdgeCases(t *testing.T) {
// Therefore, we cannot trigger the server-side path traversal block with this client. // Therefore, we cannot trigger the server-side path traversal block with this client.
// Instead, we verify that the file is created successfully within the jail (contained). // Instead, we verify that the file is created successfully within the jail (contained).
// The server-side protection logic is verified in unit tests (sftpd/sftp_server_test.go). // The server-side protection logic is verified in unit tests (sftpd/sftp_server_test.go).
file, err := sftpClient.Create(traversalPath) file, err := sftpClient.Create(traversalPath)
require.NoError(t, err, "creation should succeed because client sanitizes path") require.NoError(t, err, "creation should succeed because client sanitizes path")
file.Close() file.Close()
// Clean up // Clean up
err = sftpClient.Remove(traversalPath) err = sftpClient.Remove(traversalPath)
require.NoError(t, err) require.NoError(t, err)
@@ -649,4 +649,3 @@ func TestFileContent(t *testing.T) {
sftpClient.Remove(filename) sftpClient.Remove(filename)
}) })
} }

View File

@@ -420,4 +420,3 @@ func findTestDataPath() string {
return "./testdata" return "./testdata"
} }

View File

@@ -4,6 +4,10 @@ import (
"context" "context"
"flag" "flag"
"fmt" "fmt"
"strconv"
"strings"
"time"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
@@ -11,9 +15,6 @@ import (
util_http "github.com/seaweedfs/seaweedfs/weed/util/http" util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
"strconv"
"strings"
"time"
) )
var ( var (

View File

@@ -4,17 +4,16 @@ import (
"context" "context"
"flag" "flag"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/pb"
"log" "log"
"math/rand" "math/rand"
"time" "time"
"google.golang.org/grpc"
"github.com/seaweedfs/seaweedfs/weed/operation" "github.com/seaweedfs/seaweedfs/weed/operation"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/security"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http" util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
"google.golang.org/grpc"
) )
var ( var (

View File

@@ -4,13 +4,14 @@ import (
"crypto/md5" "crypto/md5"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"net/http"
"strings"
"time"
"github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http" util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
"net/http"
"strings"
"time"
) )
// Downloads an item from an S3 Bucket in the region configured in the shared config // Downloads an item from an S3 Bucket in the region configured in the shared config

View File

@@ -4,7 +4,6 @@ import (
"bytes" "bytes"
"flag" "flag"
"fmt" "fmt"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
"io" "io"
"log" "log"
"math/rand" "math/rand"
@@ -14,6 +13,8 @@ import (
"strings" "strings"
"sync" "sync"
"time" "time"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
) )
var ( var (

View File

@@ -4,7 +4,6 @@ import (
"bytes" "bytes"
"flag" "flag"
"fmt" "fmt"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
"io" "io"
"log" "log"
"math/rand" "math/rand"
@@ -15,6 +14,8 @@ import (
"strings" "strings"
"sync" "sync"
"time" "time"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
) )
var ( var (

View File

@@ -3,11 +3,11 @@ package main
import ( import (
"context" "context"
"flag" "flag"
"github.com/seaweedfs/seaweedfs/weed/pb"
"log" "log"
"time" "time"
"github.com/seaweedfs/seaweedfs/weed/operation" "github.com/seaweedfs/seaweedfs/weed/operation"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/security"
"github.com/seaweedfs/seaweedfs/weed/storage/needle" "github.com/seaweedfs/seaweedfs/weed/storage/needle"
util2 "github.com/seaweedfs/seaweedfs/weed/util" util2 "github.com/seaweedfs/seaweedfs/weed/util"

View File

@@ -1,10 +1,11 @@
package cluster package cluster
import ( import (
"github.com/seaweedfs/seaweedfs/weed/pb"
"strconv" "strconv"
"sync" "sync"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/pb"
) )
func TestConcurrentAddRemoveNodes(t *testing.T) { func TestConcurrentAddRemoveNodes(t *testing.T) {

View File

@@ -1,8 +1,9 @@
package cluster package cluster
import ( import (
"github.com/seaweedfs/seaweedfs/weed/pb"
"time" "time"
"github.com/seaweedfs/seaweedfs/weed/pb"
) )
type GroupMembers struct { type GroupMembers struct {

View File

@@ -2,9 +2,10 @@ package lock_manager
import ( import (
"fmt" "fmt"
"time"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"time"
) )
const RenewInterval = time.Second * 3 const RenewInterval = time.Second * 3

View File

@@ -2,10 +2,11 @@ package lock_manager
import ( import (
"fmt" "fmt"
"github.com/google/uuid"
"github.com/seaweedfs/seaweedfs/weed/glog"
"sync" "sync"
"time" "time"
"github.com/google/uuid"
"github.com/seaweedfs/seaweedfs/weed/glog"
) )
var LockErrorNonEmptyTokenOnNewLock = fmt.Errorf("lock: non-empty token on a new lock") var LockErrorNonEmptyTokenOnNewLock = fmt.Errorf("lock: non-empty token on a new lock")

View File

@@ -2,12 +2,13 @@ package command
import ( import (
"fmt" "fmt"
"github.com/posener/complete"
completeinstall "github.com/posener/complete/cmd/install"
flag "github.com/seaweedfs/seaweedfs/weed/util/fla9"
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
"github.com/posener/complete"
completeinstall "github.com/posener/complete/cmd/install"
flag "github.com/seaweedfs/seaweedfs/weed/util/fla9"
) )
func AutocompleteMain(commands []*Command) bool { func AutocompleteMain(commands []*Command) bool {

View File

@@ -4,8 +4,6 @@ import (
"bufio" "bufio"
"context" "context"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/util/version"
"io" "io"
"math" "math"
"math/rand" "math/rand"
@@ -16,14 +14,15 @@ import (
"sync" "sync"
"time" "time"
"google.golang.org/grpc"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/operation" "github.com/seaweedfs/seaweedfs/weed/operation"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/security"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http" util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
"github.com/seaweedfs/seaweedfs/weed/util/version"
"github.com/seaweedfs/seaweedfs/weed/wdclient" "github.com/seaweedfs/seaweedfs/weed/wdclient"
"google.golang.org/grpc"
) )
type BenchmarkOptions struct { type BenchmarkOptions struct {

View File

@@ -2,13 +2,13 @@ package command
import ( import (
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/pb"
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
"time" "time"
"github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/security"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"

View File

@@ -5,11 +5,12 @@ package command
import ( import (
"context" "context"
"strings"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
elastic "github.com/olivere/elastic/v7" elastic "github.com/olivere/elastic/v7"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"strings"
) )
type EsDocument struct { type EsDocument struct {

View File

@@ -3,6 +3,9 @@ package command
import ( import (
"context" "context"
"fmt" "fmt"
"os"
"time"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
@@ -11,8 +14,6 @@ import (
"github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/security"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"google.golang.org/grpc" "google.golang.org/grpc"
"os"
"time"
) )
type RemoteGatewayOptions struct { type RemoteGatewayOptions struct {

View File

@@ -3,6 +3,12 @@ package command
import ( import (
"context" "context"
"fmt" "fmt"
"math"
"math/rand"
"path/filepath"
"strings"
"time"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
@@ -12,11 +18,6 @@ import (
"github.com/seaweedfs/seaweedfs/weed/replication/source" "github.com/seaweedfs/seaweedfs/weed/replication/source"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
"math"
"math/rand"
"path/filepath"
"strings"
"time"
) )
func (option *RemoteGatewayOptions) followBucketUpdatesAndUploadToRemote(filerSource *source.FilerSource) error { func (option *RemoteGatewayOptions) followBucketUpdatesAndUploadToRemote(filerSource *source.FilerSource) error {

View File

@@ -2,6 +2,8 @@ package command
import ( import (
"fmt" "fmt"
"time"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
@@ -9,7 +11,6 @@ import (
"github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/security"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"google.golang.org/grpc" "google.golang.org/grpc"
"time"
) )
type RemoteSyncOptions struct { type RemoteSyncOptions struct {

View File

@@ -1,12 +1,13 @@
package command package command
import ( import (
"sync"
"sync/atomic"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"sync"
"sync/atomic"
) )
type MetadataProcessor struct { type MetadataProcessor struct {

View File

@@ -1105,7 +1105,6 @@ func startMiniWorker() {
glog.Infof("Maintenance worker %s started successfully", workerInstance.ID()) glog.Infof("Maintenance worker %s started successfully", workerInstance.ID())
} }
const credentialsInstructionTemplate = ` const credentialsInstructionTemplate = `
To create S3 credentials, you have two options: To create S3 credentials, you have two options:
@@ -1166,10 +1165,10 @@ func printWelcomeMessage() {
fmt.Fprintf(&sb, credentialsInstructionTemplate, *miniIp, *miniAdminOptions.port) fmt.Fprintf(&sb, credentialsInstructionTemplate, *miniIp, *miniAdminOptions.port)
} else { } else {
sb.WriteString("\n To create S3 credentials, use environment variables:\n\n") sb.WriteString("\n To create S3 credentials, use environment variables:\n\n")
sb.WriteString(" export AWS_ACCESS_KEY_ID=your-access-key\\n") sb.WriteString(" export AWS_ACCESS_KEY_ID=your-access-key\\n")
sb.WriteString(" export AWS_SECRET_ACCESS_KEY=your-secret-key\\n") sb.WriteString(" export AWS_SECRET_ACCESS_KEY=your-secret-key\\n")
sb.WriteString(" weed mini -dir=/data\\n") sb.WriteString(" weed mini -dir=/data\\n")
sb.WriteString(" This will create initial credentials for the 'mini' user.\\n") sb.WriteString(" This will create initial credentials for the 'mini' user.\\n")
} }
fmt.Print(sb.String()) fmt.Print(sb.String())

View File

@@ -3,10 +3,11 @@ package command
import ( import (
"bufio" "bufio"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/glog"
"io" "io"
"os" "os"
"strings" "strings"
"github.com/seaweedfs/seaweedfs/weed/glog"
) )
const ( const (

View File

@@ -3,7 +3,6 @@ package command
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/util/version"
"net" "net"
"os" "os"
"runtime" "runtime"
@@ -17,6 +16,7 @@ import (
stats_collect "github.com/seaweedfs/seaweedfs/weed/stats" stats_collect "github.com/seaweedfs/seaweedfs/weed/stats"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"github.com/seaweedfs/seaweedfs/weed/util/grace" "github.com/seaweedfs/seaweedfs/weed/util/grace"
"github.com/seaweedfs/seaweedfs/weed/util/version"
) )
var ( var (

View File

@@ -2,6 +2,7 @@ package command
import ( import (
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/security" "github.com/seaweedfs/seaweedfs/weed/security"

View File

@@ -10,7 +10,6 @@ import (
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt" "fmt"
swv "github.com/seaweedfs/seaweedfs/weed/util/version"
"io" "io"
"net/http" "net/http"
"os" "os"
@@ -22,6 +21,7 @@ import (
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
util_http "github.com/seaweedfs/seaweedfs/weed/util/http" util_http "github.com/seaweedfs/seaweedfs/weed/util/http"
swv "github.com/seaweedfs/seaweedfs/weed/util/version"
"golang.org/x/net/context/ctxhttp" "golang.org/x/net/context/ctxhttp"
) )

View File

@@ -2,8 +2,9 @@ package command
import ( import (
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/util/version"
"runtime" "runtime"
"github.com/seaweedfs/seaweedfs/weed/util/version"
) )
var cmdVersion = &Command{ var cmdVersion = &Command{

View File

@@ -15,7 +15,7 @@ import (
func (store *FilerEtcStore) LoadConfiguration(ctx context.Context) (*iam_pb.S3ApiConfiguration, error) { func (store *FilerEtcStore) LoadConfiguration(ctx context.Context) (*iam_pb.S3ApiConfiguration, error) {
s3cfg := &iam_pb.S3ApiConfiguration{} s3cfg := &iam_pb.S3ApiConfiguration{}
glog.V(1).Infof("Loading IAM configuration from %s/%s (using current active filer)", glog.V(1).Infof("Loading IAM configuration from %s/%s (using current active filer)",
filer.IamConfigDirectory, filer.IamIdentityFile) filer.IamConfigDirectory, filer.IamIdentityFile)
err := store.withFilerClient(func(client filer_pb.SeaweedFilerClient) error { err := store.withFilerClient(func(client filer_pb.SeaweedFilerClient) error {
@@ -25,31 +25,31 @@ func (store *FilerEtcStore) LoadConfiguration(ctx context.Context) (*iam_pb.S3Ap
content, err := filer.ReadInsideFiler(client, filer.IamConfigDirectory, filer.IamIdentityFile) content, err := filer.ReadInsideFiler(client, filer.IamConfigDirectory, filer.IamIdentityFile)
if err != nil { if err != nil {
if err == filer_pb.ErrNotFound { if err == filer_pb.ErrNotFound {
glog.V(1).Infof("IAM identity file not found at %s/%s, no credentials loaded", glog.V(1).Infof("IAM identity file not found at %s/%s, no credentials loaded",
filer.IamConfigDirectory, filer.IamIdentityFile) filer.IamConfigDirectory, filer.IamIdentityFile)
return nil return nil
} }
glog.Errorf("Failed to read IAM identity file from %s/%s: %v", glog.Errorf("Failed to read IAM identity file from %s/%s: %v",
filer.IamConfigDirectory, filer.IamIdentityFile, err) filer.IamConfigDirectory, filer.IamIdentityFile, err)
return err return err
} }
if len(content) == 0 { if len(content) == 0 {
glog.V(1).Infof("IAM identity file at %s/%s is empty", glog.V(1).Infof("IAM identity file at %s/%s is empty",
filer.IamConfigDirectory, filer.IamIdentityFile) filer.IamConfigDirectory, filer.IamIdentityFile)
return nil return nil
} }
glog.V(2).Infof("Read %d bytes from %s/%s", glog.V(2).Infof("Read %d bytes from %s/%s",
len(content), filer.IamConfigDirectory, filer.IamIdentityFile) len(content), filer.IamConfigDirectory, filer.IamIdentityFile)
if err := filer.ParseS3ConfigurationFromBytes(content, s3cfg); err != nil { if err := filer.ParseS3ConfigurationFromBytes(content, s3cfg); err != nil {
glog.Errorf("Failed to parse IAM configuration from %s/%s: %v", glog.Errorf("Failed to parse IAM configuration from %s/%s: %v",
filer.IamConfigDirectory, filer.IamIdentityFile, err) filer.IamConfigDirectory, filer.IamIdentityFile, err)
return err return err
} }
glog.V(1).Infof("Successfully parsed IAM configuration with %d identities and %d accounts", glog.V(1).Infof("Successfully parsed IAM configuration with %d identities and %d accounts",
len(s3cfg.Identities), len(s3cfg.Accounts)) len(s3cfg.Identities), len(s3cfg.Accounts))
return nil return nil
}) })
@@ -63,7 +63,7 @@ func (store *FilerEtcStore) LoadConfiguration(ctx context.Context) (*iam_pb.S3Ap
for _, identity := range s3cfg.Identities { for _, identity := range s3cfg.Identities {
credCount := len(identity.Credentials) credCount := len(identity.Credentials)
actionCount := len(identity.Actions) actionCount := len(identity.Actions)
glog.V(2).Infof(" Identity: %s (credentials: %d, actions: %d)", glog.V(2).Infof(" Identity: %s (credentials: %d, actions: %d)",
identity.Name, credCount, actionCount) identity.Name, credCount, actionCount)
for _, cred := range identity.Credentials { for _, cred := range identity.Credentials {
glog.V(3).Infof(" Access Key: %s", cred.AccessKey) glog.V(3).Infof(" Access Key: %s", cred.AccessKey)

View File

@@ -24,14 +24,14 @@ func (store *FilerEtcStore) GetPolicies(ctx context.Context) (map[string]policy_
store.mu.RLock() store.mu.RLock()
configured := store.filerAddressFunc != nil configured := store.filerAddressFunc != nil
store.mu.RUnlock() store.mu.RUnlock()
if !configured { if !configured {
glog.V(1).Infof("Filer client not configured for policy retrieval, returning empty policies") glog.V(1).Infof("Filer client not configured for policy retrieval, returning empty policies")
// Return empty policies if filer client is not configured // Return empty policies if filer client is not configured
return policiesCollection.Policies, nil return policiesCollection.Policies, nil
} }
glog.V(2).Infof("Loading IAM policies from %s/%s (using current active filer)", glog.V(2).Infof("Loading IAM policies from %s/%s (using current active filer)",
filer.IamConfigDirectory, filer.IamPoliciesFile) filer.IamConfigDirectory, filer.IamPoliciesFile)
err := store.withFilerClient(func(client filer_pb.SeaweedFilerClient) error { err := store.withFilerClient(func(client filer_pb.SeaweedFilerClient) error {
@@ -41,27 +41,27 @@ func (store *FilerEtcStore) GetPolicies(ctx context.Context) (map[string]policy_
content, err := filer.ReadInsideFiler(client, filer.IamConfigDirectory, filer.IamPoliciesFile) content, err := filer.ReadInsideFiler(client, filer.IamConfigDirectory, filer.IamPoliciesFile)
if err != nil { if err != nil {
if err == filer_pb.ErrNotFound { if err == filer_pb.ErrNotFound {
glog.V(1).Infof("Policies file not found at %s/%s, returning empty policies", glog.V(1).Infof("Policies file not found at %s/%s, returning empty policies",
filer.IamConfigDirectory, filer.IamPoliciesFile) filer.IamConfigDirectory, filer.IamPoliciesFile)
// If file doesn't exist, return empty collection // If file doesn't exist, return empty collection
return nil return nil
} }
glog.Errorf("Failed to read IAM policies file from %s/%s: %v", glog.Errorf("Failed to read IAM policies file from %s/%s: %v",
filer.IamConfigDirectory, filer.IamPoliciesFile, err) filer.IamConfigDirectory, filer.IamPoliciesFile, err)
return err return err
} }
if len(content) == 0 { if len(content) == 0 {
glog.V(2).Infof("IAM policies file at %s/%s is empty", glog.V(2).Infof("IAM policies file at %s/%s is empty",
filer.IamConfigDirectory, filer.IamPoliciesFile) filer.IamConfigDirectory, filer.IamPoliciesFile)
return nil return nil
} }
glog.V(2).Infof("Read %d bytes from %s/%s", glog.V(2).Infof("Read %d bytes from %s/%s",
len(content), filer.IamConfigDirectory, filer.IamPoliciesFile) len(content), filer.IamConfigDirectory, filer.IamPoliciesFile)
if err := json.Unmarshal(content, policiesCollection); err != nil { if err := json.Unmarshal(content, policiesCollection); err != nil {
glog.Errorf("Failed to parse IAM policies from %s/%s: %v", glog.Errorf("Failed to parse IAM policies from %s/%s: %v",
filer.IamConfigDirectory, filer.IamPoliciesFile, err) filer.IamConfigDirectory, filer.IamPoliciesFile, err)
return err return err
} }

View File

@@ -64,7 +64,7 @@ func (store *FilerEtcStore) withFilerClient(fn func(client filer_pb.SeaweedFiler
filerAddress := store.filerAddressFunc() filerAddress := store.filerAddressFunc()
dialOption := store.grpcDialOption dialOption := store.grpcDialOption
store.mu.RUnlock() store.mu.RUnlock()
if filerAddress == "" { if filerAddress == "" {
return fmt.Errorf("filer_etc: no filer discovered yet - please ensure a filer is running and accessible") return fmt.Errorf("filer_etc: no filer discovered yet - please ensure a filer is running and accessible")
} }

View File

@@ -5,10 +5,11 @@ import (
"database/sql" "database/sql"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"strings"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"strings"
) )
func (store *AbstractSqlStore) KvPut(ctx context.Context, key []byte, value []byte) (err error) { func (store *AbstractSqlStore) KvPut(ctx context.Context, key []byte, value []byte) (err error) {

View File

@@ -2,11 +2,10 @@ package arangodb
import ( import (
"context" "context"
"github.com/arangodb/go-driver"
"time" "time"
"github.com/arangodb/go-driver"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
) )

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"github.com/gocql/gocql" "github.com/gocql/gocql"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
) )

View File

@@ -4,6 +4,7 @@ import (
"context" "context"
"encoding/base64" "encoding/base64"
"fmt" "fmt"
"github.com/gocql/gocql" "github.com/gocql/gocql"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"

View File

@@ -1,11 +1,12 @@
package filer package filer
import ( import (
"github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/util"
"os" "os"
"reflect" "reflect"
"strings" "strings"
"github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/util"
) )
var ( var (

View File

@@ -203,6 +203,3 @@ func (q *CleanupQueue) OldestAge() time.Duration {
item := front.Value.(*queueItem) item := front.Value.(*queueItem)
return time.Since(item.queueTime) return time.Since(item.queueTime)
} }

View File

@@ -367,6 +367,3 @@ func TestCleanupQueue_Concurrent(t *testing.T) {
// Just verify no panic occurred and queue is in consistent state // Just verify no panic occurred and queue is in consistent state
_ = q.Len() _ = q.Len()
} }

View File

@@ -433,4 +433,3 @@ func (efc *EmptyFolderCleaner) GetCachedFolderCount(folder string) (int, bool) {
} }
return 0, false return 0, false
} }

View File

@@ -566,4 +566,3 @@ func TestEmptyFolderCleaner_queueFIFOOrder(t *testing.T) {
cleaner.Stop() cleaner.Stop()
} }

View File

@@ -1,11 +1,11 @@
package filer package filer
import ( import (
"github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants"
"os" "os"
"time" "time"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
) )

View File

@@ -3,6 +3,7 @@ package etcd
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
) )

View File

@@ -1,8 +1,9 @@
package etcd package etcd
import ( import (
"github.com/seaweedfs/seaweedfs/weed/filer/store_test"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/filer/store_test"
) )
func TestStore(t *testing.T) { func TestStore(t *testing.T) {

View File

@@ -1,8 +1,9 @@
package filer package filer
import ( import (
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
) )
func Test_removeGarbageChunks(t *testing.T) { func Test_removeGarbageChunks(t *testing.T) {

View File

@@ -4,11 +4,11 @@ import (
"bytes" "bytes"
"context" "context"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/wdclient"
"math" "math"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"github.com/seaweedfs/seaweedfs/weed/wdclient"
) )
func TotalSize(chunks []*filer_pb.FileChunk) (size uint64) { func TotalSize(chunks []*filer_pb.FileChunk) (size uint64) {

View File

@@ -2,13 +2,13 @@ package filer
import ( import (
"context" "context"
"github.com/stretchr/testify/assert"
"log" "log"
"slices" "slices"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/stretchr/testify/assert"
) )
func TestDoMinusChunks(t *testing.T) { func TestDoMinusChunks(t *testing.T) {

View File

@@ -2,8 +2,9 @@ package filer
import ( import (
"container/list" "container/list"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"slices" "slices"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
) )
func readResolvedChunks(chunks []*filer_pb.FileChunk, startOffset int64, stopOffset int64) (visibles *IntervalList[*VisibleInterval]) { func readResolvedChunks(chunks []*filer_pb.FileChunk, startOffset int64, stopOffset int64) (visibles *IntervalList[*VisibleInterval]) {

View File

@@ -2,10 +2,11 @@ package filer
import ( import (
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"math" "math"
"math/rand" "math/rand"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
) )
func TestReadResolvedChunks(t *testing.T) { func TestReadResolvedChunks(t *testing.T) {

View File

@@ -32,9 +32,9 @@ type VirtualFilerStore interface {
} }
type FilerStoreWrapper struct { type FilerStoreWrapper struct {
defaultStore FilerStore defaultStore FilerStore
pathToStore ptrie.Trie[string] pathToStore ptrie.Trie[string]
storeIdToStore map[string]FilerStore storeIdToStore map[string]FilerStore
hasPathSpecificStore bool // fast check to skip MatchPrefix when no path-specific stores hasPathSpecificStore bool // fast check to skip MatchPrefix when no path-specific stores
} }

View File

@@ -2,9 +2,10 @@ package hbase
import ( import (
"context" "context"
"time"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/tsuna/gohbase/hrpc" "github.com/tsuna/gohbase/hrpc"
"time"
) )
const ( const (

View File

@@ -2,8 +2,9 @@ package filer
import ( import (
"fmt" "fmt"
"github.com/stretchr/testify/assert"
"testing" "testing"
"github.com/stretchr/testify/assert"
) )
type IntervalInt int type IntervalInt int

View File

@@ -3,6 +3,7 @@ package leveldb
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb"
) )

View File

@@ -3,12 +3,12 @@ package leveldb
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/pb"
"os" "os"
"testing" "testing"
"time" "time"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
) )

View File

@@ -2,10 +2,10 @@ package leveldb
import ( import (
"context" "context"
"github.com/seaweedfs/seaweedfs/weed/pb"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
) )

View File

@@ -1,8 +1,9 @@
package leveldb package leveldb
import ( import (
"github.com/seaweedfs/seaweedfs/weed/filer"
"os" "os"
"github.com/seaweedfs/seaweedfs/weed/filer"
) )
var _ filer.BucketAware = (*LevelDB3Store)(nil) var _ filer.BucketAware = (*LevelDB3Store)(nil)

View File

@@ -2,10 +2,10 @@ package leveldb
import ( import (
"context" "context"
"github.com/seaweedfs/seaweedfs/weed/pb"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
) )

View File

@@ -5,14 +5,13 @@ import (
"crypto/x509" "crypto/x509"
"database/sql" "database/sql"
"fmt" "fmt"
"github.com/go-sql-driver/mysql"
"os" "os"
"strings" "strings"
"time" "time"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/go-sql-driver/mysql"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
"github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/filer/abstract_sql" "github.com/seaweedfs/seaweedfs/weed/filer/abstract_sql"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
) )

View File

@@ -2,6 +2,7 @@ package filer
import ( import (
"context" "context"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/pb/remote_pb" "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"

View File

@@ -311,7 +311,7 @@ func TestSingleChunkCacherDoneSignal(t *testing.T) {
// TestSingleChunkCacherLookupError tests handling of lookup errors // TestSingleChunkCacherLookupError tests handling of lookup errors
func TestSingleChunkCacherLookupError(t *testing.T) { func TestSingleChunkCacherLookupError(t *testing.T) {
cache := newMockChunkCacheForReaderCache() cache := newMockChunkCacheForReaderCache()
// Lookup function that returns an error // Lookup function that returns an error
lookupFn := func(ctx context.Context, fileId string) ([]string, error) { lookupFn := func(ctx context.Context, fileId string) ([]string, error) {
return nil, fmt.Errorf("lookup failed for %s", fileId) return nil, fmt.Errorf("lookup failed for %s", fileId)
@@ -322,7 +322,7 @@ func TestSingleChunkCacherLookupError(t *testing.T) {
buffer := make([]byte, 100) buffer := make([]byte, 100)
_, err := rc.ReadChunkAt(context.Background(), buffer, "error-test", nil, false, 0, 100, true) _, err := rc.ReadChunkAt(context.Background(), buffer, "error-test", nil, false, 0, 100, true)
if err == nil { if err == nil {
t.Error("Expected an error, got nil") t.Error("Expected an error, got nil")
} }

View File

@@ -1,10 +1,11 @@
package redis2 package redis2
import ( import (
"time"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"time"
) )
func init() { func init() {

View File

@@ -3,11 +3,12 @@ package redis3
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/redis/go-redis/v9"
"github.com/stvp/tempredis"
"strconv" "strconv"
"testing" "testing"
"time" "time"
"github.com/redis/go-redis/v9"
"github.com/stvp/tempredis"
) )
var names = []string{ var names = []string{

View File

@@ -3,6 +3,7 @@ package redis3
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/util/skiplist" "github.com/seaweedfs/seaweedfs/weed/util/skiplist"

View File

@@ -1,10 +1,11 @@
package redis_lua package redis_lua
import ( import (
"time"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"time"
) )
func init() { func init() {

View File

@@ -2,6 +2,7 @@ package stored_procedure
import ( import (
_ "embed" _ "embed"
"github.com/redis/go-redis/v9" "github.com/redis/go-redis/v9"
) )

View File

@@ -2,6 +2,7 @@ package filer
import ( import (
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/pb/remote_pb" "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb"

View File

@@ -3,14 +3,15 @@ package filer
import ( import (
"context" "context"
"fmt" "fmt"
"math"
"strings"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/remote_pb" "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb"
"github.com/seaweedfs/seaweedfs/weed/remote_storage" "github.com/seaweedfs/seaweedfs/weed/remote_storage"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
"math"
"strings"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"

View File

@@ -1,9 +1,10 @@
package filer package filer
import ( import (
"testing"
"github.com/seaweedfs/seaweedfs/weed/pb/remote_pb" "github.com/seaweedfs/seaweedfs/weed/pb/remote_pb"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"testing"
) )
func TestFilerRemoteStorage_FindRemoteStorageClient(t *testing.T) { func TestFilerRemoteStorage_FindRemoteStorageClient(t *testing.T) {

View File

@@ -6,6 +6,7 @@ package ydb
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/filer/abstract_sql" "github.com/seaweedfs/seaweedfs/weed/filer/abstract_sql"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"

View File

@@ -4,8 +4,9 @@
package ydb package ydb
import ( import (
"github.com/seaweedfs/seaweedfs/weed/filer/store_test"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/filer/store_test"
) )
func TestStore(t *testing.T) { func TestStore(t *testing.T) {

View File

@@ -5,6 +5,7 @@ package ydb
import ( import (
"fmt" "fmt"
"github.com/ydb-platform/ydb-go-sdk/v3/table" "github.com/ydb-platform/ydb-go-sdk/v3/table"
"github.com/ydb-platform/ydb-go-sdk/v3/table/options" "github.com/ydb-platform/ydb-go-sdk/v3/table/options"
"github.com/ydb-platform/ydb-go-sdk/v3/table/types" "github.com/ydb-platform/ydb-go-sdk/v3/table/types"

View File

@@ -21,7 +21,6 @@ package glog
import ( import (
"errors" "errors"
"fmt" "fmt"
flag "github.com/seaweedfs/seaweedfs/weed/util/fla9"
"os" "os"
"os/user" "os/user"
"path/filepath" "path/filepath"
@@ -29,6 +28,8 @@ import (
"strings" "strings"
"sync" "sync"
"time" "time"
flag "github.com/seaweedfs/seaweedfs/weed/util/fla9"
) )
// MaxSize is the maximum size of a log file in bytes. // MaxSize is the maximum size of a log file in bytes.

View File

@@ -42,16 +42,16 @@ const (
// Configuration Field Names // Configuration Field Names
const ( const (
ConfigFieldFilerAddress = "filerAddress" ConfigFieldFilerAddress = "filerAddress"
ConfigFieldBasePath = "basePath" ConfigFieldBasePath = "basePath"
ConfigFieldIssuer = "issuer" ConfigFieldIssuer = "issuer"
ConfigFieldClientID = "clientId" ConfigFieldClientID = "clientId"
ConfigFieldClientSecret = "clientSecret" ConfigFieldClientSecret = "clientSecret"
ConfigFieldJWKSUri = "jwksUri" ConfigFieldJWKSUri = "jwksUri"
ConfigFieldScopes = "scopes" ConfigFieldScopes = "scopes"
ConfigFieldUserInfoUri = "userInfoUri" ConfigFieldUserInfoUri = "userInfoUri"
ConfigFieldRedirectUri = "redirectUri" ConfigFieldRedirectUri = "redirectUri"
ConfigFieldTLSCACert = "tlsCaCert" ConfigFieldTLSCACert = "tlsCaCert"
ConfigFieldTLSInsecureSkipVerify = "tlsInsecureSkipVerify" ConfigFieldTLSInsecureSkipVerify = "tlsInsecureSkipVerify"
) )

View File

@@ -457,7 +457,7 @@ func TestSessionDurationCappedByTokenExpiration(t *testing.T) {
service := NewSTSService() service := NewSTSService()
config := &STSConfig{ config := &STSConfig{
TokenDuration: FlexibleDuration{time.Hour}, // Default: 1 hour TokenDuration: FlexibleDuration{time.Hour}, // Default: 1 hour
MaxSessionLength: FlexibleDuration{time.Hour * 12}, MaxSessionLength: FlexibleDuration{time.Hour * 12},
Issuer: "test-sts", Issuer: "test-sts",
SigningKey: []byte("test-signing-key-32-characters-long"), SigningKey: []byte("test-signing-key-32-characters-long"),

View File

@@ -453,10 +453,10 @@ func TestSecurityMaliciousSTSUserARNs(t *testing.T) {
// should be accepted as a valid role name "role/name". // should be accepted as a valid role name "role/name".
func TestEdgeCaseMultipleRoleMarkers(t *testing.T) { func TestEdgeCaseMultipleRoleMarkers(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
arn string arn string
expected string expected string
useSTS bool useSTS bool
}{ }{
{ {
name: "legacy_format_role_in_path", name: "legacy_format_role_in_path",

View File

@@ -1,9 +1,10 @@
package images package images
import ( import (
"github.com/seaweedfs/seaweedfs/weed/util"
"os" "os"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/util"
) )
func TestXYZ(t *testing.T) { func TestXYZ(t *testing.T) {

View File

@@ -2,9 +2,10 @@ package images
import ( import (
"bytes" "bytes"
"github.com/seaweedfs/seaweedfs/weed/util"
"os" "os"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/util"
) )
func TestResizing(t *testing.T) { func TestResizing(t *testing.T) {

View File

@@ -1,8 +1,9 @@
package mount package mount
import ( import (
"github.com/seaweedfs/seaweedfs/weed/util"
"testing" "testing"
"github.com/seaweedfs/seaweedfs/weed/util"
) )
func TestInodeEntry_removeOnePath(t *testing.T) { func TestInodeEntry_removeOnePath(t *testing.T) {

View File

@@ -1,8 +1,9 @@
package mount package mount
import ( import (
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"sync" "sync"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
) )
type LockedEntry struct { type LockedEntry struct {

View File

@@ -19,8 +19,8 @@ import (
// e.g. fill fileId field for chunks // e.g. fill fileId field for chunks
type MetaCache struct { type MetaCache struct {
root util.FullPath root util.FullPath
localStore filer.VirtualFilerStore localStore filer.VirtualFilerStore
leveldbStore *leveldb.LevelDBStore // direct reference for batch operations leveldbStore *leveldb.LevelDBStore // direct reference for batch operations
sync.RWMutex sync.RWMutex
uidGidMapper *UidGidMapper uidGidMapper *UidGidMapper

View File

@@ -2,12 +2,13 @@ package meta_cache
import ( import (
"context" "context"
"strings"
"github.com/seaweedfs/seaweedfs/weed/filer" "github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb" "github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" "github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
"strings"
) )
type MetadataFollower struct { type MetadataFollower struct {

View File

@@ -1,8 +1,9 @@
package page_writer package page_writer
import ( import (
"github.com/stretchr/testify/assert"
"testing" "testing"
"github.com/stretchr/testify/assert"
) )
func Test_PageChunkWrittenIntervalList(t *testing.T) { func Test_PageChunkWrittenIntervalList(t *testing.T) {

View File

@@ -2,6 +2,7 @@ package mount
import ( import (
"context" "context"
"github.com/seaweedfs/seaweedfs/weed/util" "github.com/seaweedfs/seaweedfs/weed/util"
) )

View File

@@ -3,6 +3,7 @@ package mount
import ( import (
"context" "context"
"fmt" "fmt"
"github.com/seaweedfs/seaweedfs/weed/glog" "github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb/mount_pb" "github.com/seaweedfs/seaweedfs/weed/pb/mount_pb"
) )

Some files were not shown because too many files have changed in this diff Show More