Skip to content

Instantly share code, notes, and snippets.

View krisis's full-sized avatar

Krishnan Parthasarathi krisis

  • San Francisco Bay Area, CA
View GitHub Profile
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: demo
spec:
replicas: 1
template:
metadata:
labels:
app: demo
@krisis
krisis / minio-hs-polysemy.hs
Created October 23, 2019 05:10
Polysemy fun with minio-hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE OverloadedStrings#-}
{-# LANGUAGE LambdaCase, BlockArguments #-}
{-# LANGUAGE GADTs, FlexibleContexts, TypeOperators, DataKinds, PolyKinds, ScopedTypeVariables #-}
import Network.Minio
import qualified Data.HashMap.Strict as HM
import qualified Data.ByteString as B
import Polysemy
import Polysemy.Input
@krisis
krisis / Gists.hs
Created August 13, 2019 16:58
Example: servant based client API for GitHub Gists
#!/usr/bin/env stack
-- stack --resolver lts-13.22 script
{-
Run this as,
> GITHUB_AUTH_TOKEN=<your_gists_token> ./Gists.hs
-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
@krisis
krisis / Sample.chs
Last active February 27, 2018 12:44
Haskell FFI for `getmntent(3)`, `setmntent(3)`
{-# LANGUAGE ForeignFunctionInterface #-}
module MountUtils where
import Control.Monad (liftM)
import Foreign.C.Types
import Foreign.C.String
import Foreign.Ptr
import Foreign.Storable

Multipart upload backend format proposal

Both the schema below have the following properties

  1. Crash-consistent during a completeMultipartUpload/abortMultipartUpload
  2. Concurrency-safe in presence of multiple concurrent uploads

These properties allows us to avoid fcntl(3) based locking in shared mode with FS backend.

Schema-1

@krisis
krisis / minio-distributed-proposal.md
Last active May 19, 2017 11:21
Minio Marathon Host IP environment variable

Problem Statement

Minio distributed setup can be configured to use upto 16 disks. These disks may be spread across upto 16 nodes (agents in Mesos). To setup distributed Minio, we need to know the (internal) IP/hostname of all the container instances before scheduling them. E.g, in a Minio distributed setup with 4 disks spread across 4 nodes with IPs IP1, IP2, IP3 and IP4 respectively, the command to run in each container is,

minio server http://IP1:9000/disk http://IP2:9000/disk http://IP3:9000/disk http://IP4:9000/disk
@krisis
krisis / streaming-eg.go
Last active April 19, 2017 11:54
PutObjectStreaming example
package main
import (
"flag"
"log"
"os"
minio "github.com/minio/minio-go"
)
@krisis
krisis / madmin-rest.md
Last active March 5, 2023 19:25
Minio Management REST API spec

Minio Management REST API

Management APIs implement remote administrative operations over HTTP/REST. This guide is intended for SDK developers of package like madmin. If you are an enduser please take a look at mc admin CLI interface.

Authentication

  • All requests should be signed using AWS Signature Version V4
  • us-east-1 should be used in signing

API Categories

@krisis
krisis / mc-admin.md
Last active March 28, 2017 08:48
Proposal for `mc admin` subcommands

Modified proposal after comments

  1. mc admin service { start | restart } ALIAS

    • remains as is
  2. mc admin info ALIAS

    • remains as is
  3. mc admin credentials [access_key] [secret_key] ALIAS

  • renamed from password
@krisis
krisis / listIncompleteParts.hs
Last active March 15, 2017 14:42
Test case with 1001 parts
#!/usr/bin/env stack
-- stack --resolver lts-6.27 runghc --package minio-hs --package optparse-applicative --package filepath
{-# Language OverloadedStrings, ScopedTypeVariables #-}
import Network.Minio
import Network.Minio.S3API
import Control.Monad (forM_)
import Control.Monad.Catch (catchIf)
import Data.ByteString (replicate)