hep icon indicating copy to clipboard operation
hep copied to clipboard

xrootd : Checksum don't work after creation or update of a file

Open kiderrien opened this issue 5 years ago • 3 comments

Hello,

After creating or updating a file, I cannot get the checksum using query.checksum. However I get the checksum when it is not a new file or a file modified at the moment.

I get as a result:

Checksum:   XJob scheduled.

or

Checksum:   XJob scheduled.
panic: mux: cannot find data waiter for id [0 0]

I am using a local xrootd server with the adler32 checksum.

and I get the previously quoted errors with this code:

package main

import (

  "context"
  "fmt"
  "log"
  "time"

  "go-hep.org/x/hep/xrootd"
  "go-hep.org/x/hep/xrootd/xrdfs"
  "go-hep.org/x/hep/xrootd/xrdproto/query"


)
func main() {
  ctx := context.Background()
  client, err := xrootd.NewClient(ctx, "localhost", "gopher")
  if err != nil {
      log.Fatal(err)
  }
  defer client.Close()

  //file, err := client.FS().Open(ctx, "/tmp/test.txt", xrdfs.OpenModeOwnerRead|xrdfs.OpenModeOwnerWrite, xrdfs.OpenOptionsNew)
  file, err := client.FS().Open(ctx, "/tmp/test.txt", xrdfs.OpenModeOwnerRead|xrdfs.OpenModeOwnerWrite, xrdfs.OpenOptionsOpenUpdate)
  if err != nil {
      log.Fatal(err)
  }
  defer file.Close(ctx)

  if _, err := file.WriteAt([]byte("hello"), 0); err != nil {
      log.Fatal(err)
  }

  if err := file.Sync(ctx); err != nil {
      log.Fatal(err)
  }

  if err := file.Close(ctx); err != nil {
      log.Fatal(err)
  }

  time.Sleep(2 * time.Second)

  var (
    resp query.Response
    req = query.Request{
      Query: query.Checksum,
      Args:  []byte("/tmp/test.txt"),
    }
  )

  _, err = client.Send(ctx, &resp, &req)
  if err != nil {
    log.Fatalf("Checksum request error: %v", err)
  }

  fmt.Printf("Checksum: %v\n", string(resp.Data))

  if err := client.Close(); err != nil {
      log.Fatal(err)
  }
}

Is there something wrong with the way I use it?

kiderrien avatar Jul 23 '20 13:07 kiderrien

coming back from holidays. I'll try to tackle this next week after clearing a bit of my backlog.

sbinet avatar Aug 02 '20 23:08 sbinet

ok. the issue is that currently go-hep/xrootd doesn't handle async responses (ie: kXR_attn server responses) at all. this needs "a bit" of code.

sbinet avatar Aug 05 '20 10:08 sbinet

Thank you for your reply. I think we can close this ticket in this case.

kiderrien avatar Aug 05 '20 13:08 kiderrien