Help us shape the future of Go! Take the 2026 Go Developer Survey

objstore

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2026 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MetaChain = "postern-chain"
	MetaLinks = "postern-links"
)

MetaChain/MetaLinks, zincir başının üstverideki adları (öneksiz).

Variables

View Source
var (
	// ErrTransient: geçici; yeniden denenmeli (ağ, zaman aşımı, 5xx, 429).
	ErrTransient = errors.New("objstore: temporary failure")

	// ErrPermanent: yapılandırma ya da yetki hatası; yeniden denemek
	// aynı sonucu verir ve operatörün müdahalesi gerekir.
	//
	// ⚠️ AYRIM ÖNEMLİ: ikisini birleştirmek ya yanlış kimlikle sonsuza
	// dek denemek (gürültü) ya da geçici bir kesintide pes etmek
	// (kanıt kaybı) demekti.
	ErrPermanent = errors.New("objstore: permanent failure")

	// ErrTooLarge: tek PUT'un sınırını aşan nesne.
	ErrTooLarge = errors.New("objstore: object exceeds the single-PUT limit")
)

Yükleme hataları.

Functions

func CodeOf

func CodeOf(err error) (string, bool)

CodeOf, hatadan S3 kodunu çıkarır ("NoSuchBucket", "AccessDenied"...).

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client, yapılandırılmış bir nesne deposu istemcisi.

func New

func New(cfg Config) (*Client, error)

* New, istemciyi kurar ve YAPILANDIRMAYI BAŞLANGIÇTA doğrular. * * ⚠️ Hatalar burada veriliyor, ilk yüklemede değil: yanlış yazılmış bir * uç adresi, kurulumdan saatler sonra "yükleme başarısız" satırları * olarak görünseydi, operatör sebebi aramak zorunda kalırdı.

func (*Client) Bucket

func (c *Client) Bucket() string

Bucket, yapılandırılmış kova adı — arşivleyici bunu denetim kaydına yazıyor.

func (*Client) Encryption

func (c *Client) Encryption(ctx context.Context) (string, error)

Encryption, kovanın varsayılan sunucu tarafı şifrelemesi. Boş dize = varsayılan tanımlı değil.

func (*Client) Head

func (c *Client) Head(ctx context.Context, key string) (info ObjectInfo, err error)

func (*Client) ObjectLockConfig

func (c *Client) ObjectLockConfig(ctx context.Context) (ObjectLock, error)

* ObjectLockConfig, kilidi okur. * * ⚠️ "Kilit açık ama varsayılan saklama yok" AYRI BİR DURUM ve rapor * onu ayrı gösteriyor: o hâlde her nesnenin kendi saklama süresini * istekle belirtmesi gerekir — ve postern bilerek belirtmiyor, çünkü * kimliği ele geçiren onu sıfır da yapabilirdi. Yani kilit var ama * hiçbir şeyi korumuyor.

func (*Client) Put

func (c *Client) Put(ctx context.Context, key string, f *os.File, size int64, meta map[string]string) (sha256hex string, err error)

Put, dosyayı verilen anahtara yazar ve orada olduğunu DOĞRULAR.

Dönen sha256, gönderilen içeriğin özeti: çağıran bunu denetim kaydına yazıyor.

  • Put, nesneyi yükler. meta, x-amz-meta-* başlıkları olarak gider. *
  • ⚠️ META NEDEN NESNENİN ÜSTÜNDE, AYRI BİR DOSYADA DEĞİL. Kayıt zinciri
  • için iki seçenek vardı: yanına küçük bir nesne koymak, ya da nesnenin
  • kendi üstveri alanına yazmak. İkincisi seçildi çünkü ayrı nesne, kovanın
  • saklama ayarından bağımsız yaşar ve ikisinin senkron kalması kimsenin
  • garantisi değil — biri silinip diğeri kalabilir. Üstveri, nesnenin
  • kendisiyle aynı Object Lock saklama süresine tabi. *
  • SigV4 istekteki HER başlığı imzaladığı için (bkz. canonicalizeHeaders)
  • üstveri de imzanın içinde; yolda değiştirilirse imza tutmaz.

func (*Client) SignForTest

func (c *Client) SignForTest(req *http.Request, payloadHash string)

* SignForTest, testin isteği bizim imzamızla imzalamasına izin verir. * * ⚠️ YALNIZCA TESTLER İÇİN ve gerekçesi bağımsız tanık: arşivlenmiş * bir nesnenin varlığını postern'in KENDİ Put/Head'iyle doğrulamak, * "depoda duruyor" ile "istemcimiz duruyor sanıyor"u ayırt edemezdi. * Test düz bir http.Client kuruyor ve yalnızca imzayı buradan alıyor.

func (*Client) Versioning

func (c *Client) Versioning(ctx context.Context) (string, error)

Versioning, kovanın sürümleme durumu.

Boş dize = hiç açılmamış. S3 bu durumda 200 ve BOŞ bir belge döndürüyor; "kapalı" ile "okuyamadım" bu yüzden karışmıyor.

type CodeError

type CodeError struct {
	Code   string
	Status int
	Err    error
}

CodeError, S3'ün <Code> alanını taşıyan hata.

func (*CodeError) Error

func (e *CodeError) Error() string

func (*CodeError) Unwrap

func (e *CodeError) Unwrap() error

type Config

type Config struct {
	// Endpoint, deponun kök adresi ("https://s3.eu-central-1.amazonaws.com"
	// ya da "https://minio.ic:9000").
	Endpoint string
	Region   string
	Bucket   string

	// CAFile, şirket içi bir depo kendi kökünü kullanıyorsa.
	CAFile string

	Credentials Credentials

	// Timeout, tek bir isteğin üst sınırı.
	Timeout time.Duration

	/*
	 * ServerSideEncryption, x-amz-server-side-encryption başlığının
	 * değeri ("AES256", "aws:kms"). BOŞ = başlık gönderilmiyor.
	 *
	 * ⚠️ VARSAYILAN BOŞ ve bu ÖLÇÜLDÜKTEN SONRA böyle. İlk hâli
	 * koşulsuz "AES256" gönderiyordu; KMS yapılandırılmamış bir MinIO
	 * buna 501 NotImplemented ile cevap veriyor ("Server side
	 * encryption specified but KMS is not configured"). Yani şirket
	 * içi kurulumların çoğunda hiçbir kayıt yüklenemezdi ve sebebi
	 * postern'in istemediği bir şeyi ısrarla istemesi olurdu.
	 *
	 * İstemenin faydası da sınırlı: bastion'ı ele geçiren yükleme
	 * kimliğini de ele geçiriyor, yani sunucu tarafı şifreleme O
	 * saldırgana karşı hiçbir şey yapmıyor. Kapattığı şey deponun
	 * diskine başka bir yoldan erişen biri — ve AWS S3'te kovalar
	 * 2023'ten beri zaten varsayılan olarak şifreli.
	 *
	 * Doğru yer kovanın kendi ayarı; postern istemiyor, isteyen
	 * operatör buraya yazıyor.
	 */
	ServerSideEncryption string
}

Config, istemcinin hedefi.

type Credentials

type Credentials struct {
	AccessKeyID     string
	SecretAccessKey string
}

Credentials, imzalama için gereken kimlik.

type ObjectInfo added in v1.2.0

type ObjectInfo struct {
	Size int64

	/*
	 * Meta, x-amz-meta-* başlıkları — ÖNEKSİZ ve KÜÇÜK HARF anahtarlarla.
	 *
	 * ⚠️ ANAHTARLAR NORMALLEŞTİRİLİYOR. S3 kullanıcı üstverisini
	 * küçük harfe çeviriyor ("Postern-Chain" → "postern-chain") ve
	 * araya giren vekiller başlık kutusunu da değiştirebiliyor.
	 * Çağıranın yazdığı adla arayabilmesi için tek biçime indiriliyor;
	 * aksi hâlde "üstveri yok" ile "adı farklı yazılmış" karışırdı ve
	 * ikincisi sessizce "doğrulanamıyor" diye okunurdu.
	 */
	Meta map[string]string
}

* Head, nesnenin orada olduğunu ve boyutunun beklenen olduğunu doğrular. * * ⚠️ PUT'un 200 dönmesi yetmiyor. "yüklendi" damgasını vurup budayıcıya * silme izni vermeden önce, deponun nesneyi GERÇEKTEN tuttuğunu ondan * duymak istiyoruz — bizim istemcimizin başarı dediği şeyden bağımsız * bir teyit. Sıra: yükle → doğrula → damgala → silmeye izin ver.

* ObjectInfo, HEAD cevabından okunan nesne bilgisi. * * ⚠️ ÜSTVERİ DE DÖNÜYOR ve sebebi tek bir kullanıcı: kayıt zincirinin * başı yüklenirken nesnenin üstverisine yazılıyor (archive.go). O kopya, * bastion'da root olan birinin ULAŞAMADIĞI tek yer — kova saklama * süresiyle korunuyorsa. Ama yazılan bir şeyi okuyan yoksa taşıdığı * kanıt da yok: Head yalnızca boyut döndürdüğü sürece o kopya * doğrulamaya hiç girmiyordu.

type ObjectLock

type ObjectLock struct {
	Enabled bool
	// Mode: "GOVERNANCE" ya da "COMPLIANCE". Boş = varsayılan saklama
	// tanımlı değil, yani kilit açık ama SÜRE YOK.
	Mode  string
	Days  int
	Years int
}

ObjectLock, kovanın Object Lock yapılandırması.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL